From 9594c37ea0f98a8f9cde5efb90b510345d1d2684 Mon Sep 17 00:00:00 2001 From: joe <133191653+excom-dev@users.noreply.github.com> Date: Wed, 30 Sep 2026 13:23:51 -0500 Subject: [PATCH 01/12] pull wrenfield into monorepo --- .github/actions/setup-monorepo/action.yml | 2 +- .github/workflows/deploy-docs.yml | 2 +- .github/workflows/pr.yml | 8 +- .github/workflows/publish.yml | 2 +- README.md | 48 +- .../test-rig_2026-09-30-release-notes.json | 20 + .../test-rig_2026-09-30-declarations.json | 10 + .../test-rig_2026-09-30-declarations.json | 10 + .../test-rig_2026-09-30-initial.json | 10 + .../test-rig_2026-09-30-initial.json | 10 + .../test-rig_2026-09-30-declarations.json | 10 + .../test-rig_2026-09-30-declarations.json | 10 + .../test-rig_2026-09-30-declarations.json | 10 + .../test-rig_2026-09-30-fallback.json | 20 + common/config/rush/pnpm-lock.yaml | 190 +- packages/abortable-element/package.json | 5 +- .../support/tests/abortable-element.test.ts | 2 +- packages/content-carousel/package.json | 5 +- .../support/tests/content-carousel.test.ts | 2 +- .../support/tests/fade.view.test.ts | 5 +- .../support/tests/manual.view.test.ts | 4 +- .../support/tests/simple.view.test.ts | 5 +- packages/content-drawer/package.json | 5 +- .../support/tests/content-drawer.test.ts | 2 +- .../support/tests/disappear.view.test.ts | 4 +- .../support/tests/dismiss.view.test.ts | 4 +- .../support/tests/from-side.view.test.ts | 4 +- .../support/tests/simple.view.test.ts | 4 +- .../support/tests/singleton.view.test.ts | 4 +- .../support/tests/stages.view.test.ts | 4 +- packages/content-tabs/package.json | 5 +- .../support/tests/content-tabs.test.ts | 2 +- .../support/tests/file-tabs.view.test.ts | 5 +- .../support/tests/multi.view.test.ts | 5 +- .../support/tests/named.view.test.ts | 5 +- .../support/tests/simple.view.test.ts | 5 +- packages/data-table/package.json | 5 +- .../support/tests/data-table.test.ts | 2 +- .../support/tests/filter.view.test.ts | 5 +- .../support/tests/simple.view.test.ts | 5 +- packages/detect-browser/package.json | 5 +- .../support/tests/detect-browser.test.ts | 2 +- .../support/tests/language.view.test.ts | 5 +- .../support/tests/safari.view.test.ts | 5 +- .../support/tests/simple.view.test.ts | 5 +- packages/detect-features/package.json | 5 +- .../support/tests/detect-features.test.ts | 2 +- .../support/tests/share.view.test.ts | 5 +- .../support/tests/simple.view.test.ts | 5 +- packages/detect-media/package.json | 3 +- .../support/tests/detect-media.test.ts | 2 +- .../support/tests/fake-match-media.ts | 2 +- .../support/tests/pointer.view.test.ts | 5 +- .../support/tests/simple.view.test.ts | 5 +- packages/dialog-anchor/package.json | 5 +- .../support/tests/auto-close.view.test.ts | 4 +- .../support/tests/dialog-anchor.test.ts | 2 +- .../support/tests/is-modal.view.test.ts | 4 +- .../support/tests/simple.view.test.ts | 4 +- packages/dismiss-watcher/package.json | 3 +- .../support/tests/dismiss-watcher.test.ts | 2 +- .../support/tests/drawer.view.test.ts | 4 +- .../support/tests/simple.view.test.ts | 4 +- packages/docs-site/index.html | 2 +- packages/docs-site/package.json | 4 +- .../public/views/package/package.css | 5 + .../docs-site/support/docs/CONTRIBUTING.md | 2 +- .../docs-site/support/docs/INTRODUCTION.md | 12 +- packages/docs-site/support/docs/ROADMAP.md | 4 +- .../docs-site/support/tests/cells-app.test.ts | 2 +- .../support/tests/cells-app.view.test.ts | 2 +- .../support/tests/company.view.test.ts | 6 +- .../support/tests/counter-app.view.test.ts | 8 +- .../support/tests/demo-utils.test.ts | 2 +- .../tests/flight-booker-app.view.test.ts | 8 +- .../support/tests/live-app.view.test.ts | 8 +- .../support/tests/not-found.view.test.ts | 8 +- .../support/tests/package.view.test.ts | 53 +- .../support/tests/release-notice.view.test.ts | 8 +- .../support/tests/returns-app.view.test.ts | 8 +- .../docs-site/support/tests/shell.test.ts | 8 +- .../tests/temperature-app.view.test.ts | 8 +- .../support/tests/timer-app.view.test.ts | 8 +- .../support/tests/todo-app.view.test.ts | 8 +- .../tests/view-transitions-app.view.test.ts | 8 +- packages/dom-observer/package.json | 5 +- .../support/tests/dom-observer.test.ts | 2 +- .../support/tests/simple.view.test.ts | 4 +- packages/event-handler/package.json | 5 +- .../support/tests/command-dialog.view.test.ts | 4 +- .../support/tests/debounce.view.test.ts | 4 +- .../support/tests/enter-close.view.test.ts | 4 +- .../support/tests/escape-close.view.test.ts | 4 +- .../tests/event-handler.form-fallback.test.ts | 2 +- .../support/tests/event-handler.test.ts | 2 +- .../support/tests/fire-event.view.test.ts | 4 +- .../tests/prevent-default.view.test.ts | 5 +- .../support/tests/retarget.view.test.ts | 4 +- .../support/tests/with-as.view.test.ts | 4 +- packages/fetchable-element/package.json | 5 +- .../support/tests/fetch-lifecycle.test.ts | 2 +- .../support/tests/fetchable-element.test.ts | 2 +- packages/gesture-handler/package.json | 3 +- .../support/tests/carousel.view.test.ts | 4 +- .../support/tests/gesture-handler.test.ts | 2 +- .../support/tests/sheet.view.test.ts | 4 +- .../support/tests/swipe.view.test.ts | 4 +- packages/hash-object/package.json | 5 +- packages/heft-rig/package.json | 5 +- .../profiles/default/config/command-shim.ts | 58 - .../heft-rig/profiles/default/config/setup.ts | 334 +-- .../profiles/default/config/test-utils.ts | 131 - packages/heft-rig/scripts/build-docs.mjs | 45 +- .../heft-rig/scripts/build-npm-readmes.mjs | 2 +- .../heft-rig/scripts/build-package-metas.mjs | 29 +- .../heft-rig/scripts/format-package-json.mjs | 37 +- packages/heft-rig/scripts/release-notes.mjs | 52 + .../scripts/verify-publish-outputs.mjs | 43 +- packages/heft-rig/scripts/vite-build.mjs | 14 +- packages/heft-rig/scripts/vite-config.mjs | 14 - .../heft-rig/support/tests/build-docs.test.ts | 98 +- .../support/tests/build-package-metas.test.ts | 134 +- .../support/tests/docs-pipeline-fixtures.ts | 29 + .../heft-rig/support/tests/dts-paths.test.ts | 78 + .../support/tests/format-package-json.test.ts | 55 +- .../support/tests/release-notes.test.ts | 125 + .../tests/verify-publish-outputs.test.ts | 69 + .../heft-rig/support/tests/vite-build.test.ts | 32 + .../support/tests/vite-config.test.ts | 15 - packages/include-content/package.json | 5 +- .../support/tests/include-content.test.ts | 2 +- .../support/tests/lazy.view.test.ts | 5 +- .../tests/persist-content.view.test.ts | 5 +- .../support/tests/portal.view.test.ts | 5 +- .../support/tests/simple.view.test.ts | 5 +- .../tests/template-include.view.test.ts | 5 +- .../support/tests/template-ref.view.test.ts | 5 +- packages/kit-devtools/package.json | 5 +- packages/kit-logger/package.json | 5 +- packages/kit-router/package.json | 5 +- .../support/tests/kit-router-history.test.ts | 2 +- packages/kit-scroller/package.json | 5 +- packages/kit-shims/package.json | 5 +- packages/kit-utils/package.json | 5 +- .../kit-utils/support/tests/common.test.ts | 2 +- packages/kit-utils/support/tests/dom.test.ts | 2 +- .../kit-utils/support/tests/fetching.test.ts | 2 +- packages/kit-utils/support/tests/form.test.ts | 2 +- .../kit-utils/support/tests/index.test.ts | 2 +- .../support/tests/key-filter.test.ts | 2 +- .../support/tests/load-dependency.test.ts | 2 +- .../support/tests/loop-guard.test.ts | 2 +- .../kit-utils/support/tests/property.test.ts | 2 +- packages/listenable-element/package.json | 5 +- .../tests/listenable-element.matrix.test.ts | 2 +- .../support/tests/listenable-element.test.ts | 3 +- packages/loadable-element/package.json | 5 +- .../support/tests/loadable-element.test.ts | 2 +- packages/mapbox-view/package.json | 5 +- packages/network-status/package.json | 5 +- .../support/tests/network-status.test.ts | 2 +- .../support/tests/offline-banner.view.test.ts | 5 +- .../support/tests/simple.view.test.ts | 5 +- packages/neutron/package.json | 5 +- .../neutron/support/tests/commands.test.ts | 2 +- .../support/tests/common-element.test.ts | 2 +- .../support/tests/devtools-hook.test.ts | 2 +- .../support/tests/devtools-renderer.test.ts | 2 +- .../neutron/support/tests/effects.test.ts | 2 +- .../support/tests/element-config.test.ts | 2 +- packages/neutron/support/tests/entry.test.ts | 2 +- .../neutron/support/tests/lifecycles.test.ts | 2 +- .../neutron/support/tests/loop-guard.test.ts | 2 +- .../neutron/support/tests/neutron.test.ts | 2 +- .../neutron/support/tests/recompose.test.ts | 2 +- packages/neutron/tsconfig.json | 2 +- packages/nucleus-devtools/package.json | 3 +- .../support/tests/agent-discovery.test.ts | 2 +- .../support/tests/agent-tools.test.ts | 2 +- .../support/tests/audits.test.ts | 2 +- .../support/tests/devtools-adapter.test.ts | 2 +- .../support/tests/devtools-selection.test.ts | 2 +- .../support/tests/element.view.test.ts | 2 +- .../support/tests/entrypoints.test.ts | 2 +- .../support/tests/heatmap.test.ts | 2 +- .../support/tests/page-hook-core.test.ts | 2 +- .../support/tests/quark-modules.test.ts | 2 +- .../support/tests/selection-source.test.ts | 2 +- .../nucleus-devtools/support/tests/ui.test.ts | 2 +- packages/nucleus-dom/config/rig.json | 6 + packages/nucleus-dom/index.ts | 7 + packages/nucleus-dom/package.json | 46 + packages/nucleus-dom/src/command.ts | 71 + packages/nucleus-dom/src/dom.ts | 53 + packages/nucleus-dom/src/missing-apis.ts | 11 + packages/nucleus-dom/src/mutation-observer.ts | 38 + packages/nucleus-dom/src/query-selector.ts | 93 + packages/nucleus-dom/src/window.ts | 10 + packages/nucleus-dom/support/docs/README.md | 51 + .../nucleus-dom/support/tests/command.test.ts | 99 + .../support/tests/create-dom.test.ts | 117 + .../support/tests/mutation-observer.test.ts | 112 + .../support/tests/query-selector.test.ts | 78 + packages/nucleus-dom/tsconfig.json | 5 + packages/nucleus-kit/package.json | 5 +- .../support/docs/BREAKING_CHANGES.md | 1 + .../support/tests/kit-logger.test.ts | 2 +- .../support/tests/loop-guard.test.ts | 2 +- .../support/tests/progressive.test.ts | 2 +- packages/nucleus-test/config/rig.json | 6 + packages/nucleus-test/index.ts | 40 + packages/nucleus-test/package.json | 50 + packages/nucleus-test/setup.ts | 22 + packages/nucleus-test/src/console.ts | 61 + packages/nucleus-test/src/files.ts | 12 + packages/nucleus-test/src/listeners.ts | 58 + packages/nucleus-test/src/matchers.ts | 69 + packages/nucleus-test/src/node.ts | 26 + packages/nucleus-test/src/serve-static.ts | 92 + packages/nucleus-test/src/utils.ts | 99 + packages/nucleus-test/support/docs/README.md | 80 + .../nucleus-test/support/tests/files.test.ts | 29 + .../support/tests/serve-static.test.ts | 74 + .../support/tests/setup.test.ts | 159 +- .../support/tests/utils.test.ts} | 42 +- packages/nucleus-test/tsconfig.json | 5 + packages/provider-fetch/package.json | 5 +- .../support/tests/provider-fetch.test.ts | 2 +- .../support/tests/refetch.view.test.ts | 4 +- .../support/tests/simple.view.test.ts | 4 +- packages/provider-geolocation/package.json | 5 +- .../tests/provider-geolocation.test.ts | 2 +- .../support/tests/request.view.test.ts | 4 +- packages/provider-orientation/package.json | 5 +- .../tests/provider-orientation.test.ts | 2 +- .../support/tests/request.view.test.ts | 4 +- packages/provider-storage/package.json | 5 +- .../support/tests/provider-storage.test.ts | 2 +- .../support/tests/simple.view.test.ts | 4 +- packages/quark-formatter/package.json | 3 +- packages/quark-parser/package.json | 5 +- .../support/tests/grammar-docs.test.ts | 2 +- .../support/tests/parser-at-rules.test.ts | 2 +- .../support/tests/parser-declarations.test.ts | 2 +- .../support/tests/parser-edge-cases.test.ts | 2 +- .../support/tests/parser-expressions.test.ts | 2 +- .../support/tests/parser-real-world.test.ts | 2 +- .../support/tests/parser-selectors.test.ts | 2 +- .../support/tests/tokenizer.test.ts | 2 +- packages/quark-sheet/package.json | 5 +- .../support/tests/provider.view.test.ts | 4 +- .../support/tests/quark-sheet.test.ts | 2 +- .../support/tests/simple.view.test.ts | 4 +- packages/quark/package.json | 3 +- packages/quark/src/language.ts | 11 +- packages/quark/support/docs/AT_RULES.md | 2 +- packages/quark/support/docs/USE.md | 2 + packages/quark/support/tests/actions.test.ts | 2 +- .../support/tests/builtin-modules.test.ts | 2 +- packages/quark/support/tests/builtins.test.ts | 2 +- .../quark/support/tests/content-scope.test.ts | 2 +- .../support/tests/css-variables.view.test.ts | 4 +- packages/quark/support/tests/delay.test.ts | 2 +- .../quark/support/tests/devtools-hook.test.ts | 2 +- .../quark/support/tests/diagnostics.test.ts | 2 +- .../quark/support/tests/dispatch.view.test.ts | 4 +- .../quark/support/tests/element-api.test.ts | 2 +- .../quark/support/tests/evaluator.test.ts | 2 +- .../quark/support/tests/events.view.test.ts | 4 +- .../quark/support/tests/form-controls.test.ts | 2 +- packages/quark/support/tests/helpers.ts | 2 +- .../quark/support/tests/internals.test.ts | 2 +- .../quark/support/tests/iterate.view.test.ts | 4 +- .../quark/support/tests/js-api.view.test.ts | 4 +- .../quark/support/tests/language-docs.test.ts | 2 +- .../quark/support/tests/lifecycle.test.ts | 2 +- .../quark/support/tests/loop-guard.test.ts | 2 +- .../support/tests/provider-list.view.test.ts | 4 +- .../support/tests/quark-features.test.ts | 2 +- .../tests/quark-with-providers.test.ts | 2 +- packages/quark/support/tests/quark.test.ts | 2 +- .../quark/support/tests/resolvers.test.ts | 2 +- .../support/tests/selector-analysis.test.ts | 2 +- .../quark/support/tests/selectors.test.ts | 2 +- .../support/tests/toggle-content.view.test.ts | 4 +- .../quark/support/tests/unset.view.test.ts | 4 +- packages/quark/support/tests/view-helpers.ts | 14 +- .../support/tests/view-transition.test.ts | 2 +- .../tests/view-transition.view.test.ts | 4 +- packages/quark/tsconfig.json | 2 +- packages/renderable-element/package.json | 5 +- .../support/tests/host-iframe.view.test.ts | 5 +- .../support/tests/host-selector.view.test.ts | 5 +- .../support/tests/host-shadow.view.test.ts | 5 +- .../tests/persist-content.view.test.ts | 4 +- .../support/tests/render-event.view.test.ts | 4 +- .../support/tests/render-lifecycle.test.ts | 2 +- .../support/tests/renderable-element.test.ts | 2 +- packages/routable-element/package.json | 5 +- .../tests/routable-element-routing.test.ts | 2 +- .../support/tests/routable-element.test.ts | 2 +- packages/scroll-into-view/package.json | 5 +- .../support/tests/scroll-into-view.test.ts | 2 +- .../support/tests/scroll-options.test.ts | 2 +- .../support/tests/simple.view.test.ts | 5 +- .../support/tests/sticky-header.view.test.ts | 4 +- packages/service-worker/package.json | 5 +- .../support/tests/service-worker.test.ts | 2 +- .../support/tests/simple.view.test.ts | 5 +- packages/spa-route/package.json | 5 +- packages/spa-route/spa-manager.ts | 36 +- packages/spa-route/spa-route.ts | 48 +- packages/spa-route/support/docs/README.md | 10 +- packages/spa-route/support/tests/helpers.ts | 94 - .../support/tests/spa-manager-update.test.ts | 61 +- .../support/tests/spa-navigation.test.ts | 283 +- .../spa-route/support/tests/spa-route.test.ts | 2 +- .../spa-route/support/tests/spa-title.test.ts | 24 +- .../spa-route/support/tests/testing.test.ts | 96 + packages/spa-route/testing.ts | 164 + packages/super-form/package.json | 3 +- .../tests/external-trigger.view.test.ts | 4 +- .../support/tests/simple.view.test.ts | 2 +- .../support/tests/super-form.test.ts | 2 +- packages/super-img/package.json | 5 +- .../super-img/support/tests/super-img.test.ts | 2 +- packages/super-input/package.json | 5 +- .../support/tests/comprehensive.view.test.ts | 5 +- .../tests/invalid-message.view.test.ts | 5 +- .../support/tests/reflect-value.view.test.ts | 5 +- .../support/tests/slider.view.test.ts | 5 +- .../support/tests/super-input.test.ts | 2 +- .../support/tests/with-format.view.test.ts | 5 +- packages/web-authn/package.json | 5 +- .../support/tests/authenticate.view.test.ts | 5 +- .../support/tests/register.view.test.ts | 5 +- .../web-authn/support/tests/web-authn.test.ts | 2 +- packages/wrenfield/.gitignore | 3 + packages/wrenfield/CREDITS.md | 63 + packages/wrenfield/README.md | 81 + packages/wrenfield/backend/account.js | 55 + packages/wrenfield/backend/bag.js | 90 + packages/wrenfield/backend/checkout.js | 90 + packages/wrenfield/backend/config.js | 119 + packages/wrenfield/backend/shop.js | 171 ++ packages/wrenfield/config/rig.json | 5 + packages/wrenfield/data/catalog.json | 2659 +++++++++++++++++ packages/wrenfield/img/apple-touch-icon.png | Bin 0 -> 6065 bytes packages/wrenfield/img/icon-192.png | Bin 0 -> 11091 bytes packages/wrenfield/img/icon-512.png | Bin 0 -> 9415 bytes packages/wrenfield/img/icon-maskable-512.png | Bin 0 -> 4053 bytes packages/wrenfield/img/icons.svg | 32 + packages/wrenfield/img/logo.svg | 4 + .../amble-chest-of-drawers/front.webp | Bin 0 -> 89736 bytes .../products/amble-chest-of-drawers/main.webp | Bin 0 -> 143708 bytes .../products/amble-chest-of-drawers/side.webp | Bin 0 -> 35224 bytes .../products/amble-chest-of-drawers/top.webp | Bin 0 -> 68282 bytes .../front.webp | Bin 0 -> 68434 bytes .../main.webp | Bin 0 -> 91062 bytes .../blue-and-white-transferware-vase/top.webp | Bin 0 -> 73506 bytes .../img/products/bosham-chandelier/front.webp | Bin 0 -> 66328 bytes .../img/products/bosham-chandelier/main.webp | Bin 0 -> 93936 bytes .../img/products/bosham-chandelier/top.webp | Bin 0 -> 135420 bytes .../front.webp | Bin 0 -> 66870 bytes .../main.webp | Bin 0 -> 91920 bytes .../top.webp | Bin 0 -> 67914 bytes .../carved-ebonised-console/front.webp | Bin 0 -> 118114 bytes .../carved-ebonised-console/main.webp | Bin 0 -> 162488 bytes .../carved-ebonised-console/side.webp | Bin 0 -> 56778 bytes .../products/carved-ebonised-console/top.webp | Bin 0 -> 157274 bytes .../products/carved-walnut-canape/front.webp | Bin 0 -> 150346 bytes .../products/carved-walnut-canape/main.webp | Bin 0 -> 149372 bytes .../products/carved-walnut-canape/side.webp | Bin 0 -> 86612 bytes .../products/carved-walnut-canape/top.webp | Bin 0 -> 130018 bytes .../products/coldharbour-etagere/front.webp | Bin 0 -> 29346 bytes .../products/coldharbour-etagere/main.webp | Bin 0 -> 113242 bytes .../products/coldharbour-etagere/side.webp | Bin 0 -> 14380 bytes .../img/products/coldharbour-etagere/top.webp | Bin 0 -> 130440 bytes .../ebonised-bedside-cabinet/front.webp | Bin 0 -> 36688 bytes .../ebonised-bedside-cabinet/main.webp | Bin 0 -> 71102 bytes .../ebonised-bedside-cabinet/side.webp | Bin 0 -> 27016 bytes .../ebonised-bedside-cabinet/top.webp | Bin 0 -> 98962 bytes .../img/products/ebonised-bergere/front.webp | Bin 0 -> 108772 bytes .../img/products/ebonised-bergere/main.webp | Bin 0 -> 120422 bytes .../img/products/ebonised-bergere/side.webp | Bin 0 -> 79700 bytes .../img/products/ebonised-bergere/top.webp | Bin 0 -> 149126 bytes .../eddystone-coffee-table/front.webp | Bin 0 -> 60116 bytes .../products/eddystone-coffee-table/main.webp | Bin 0 -> 157980 bytes .../products/eddystone-coffee-table/top.webp | Bin 0 -> 171778 bytes .../products/elmwood-altar-coffer/front.webp | Bin 0 -> 61010 bytes .../products/elmwood-altar-coffer/main.webp | Bin 0 -> 83118 bytes .../products/elmwood-altar-coffer/side.webp | Bin 0 -> 12470 bytes .../products/elmwood-altar-coffer/top.webp | Bin 0 -> 54980 bytes .../img/products/elmwood-tea-table/front.webp | Bin 0 -> 64984 bytes .../img/products/elmwood-tea-table/main.webp | Bin 0 -> 105496 bytes .../img/products/elmwood-tea-table/top.webp | Bin 0 -> 76664 bytes .../engraved-brass-floor-vase/front.webp | Bin 0 -> 31514 bytes .../engraved-brass-floor-vase/main.webp | Bin 0 -> 47248 bytes .../engraved-brass-floor-vase/top.webp | Bin 0 -> 101218 bytes .../products/fowey-stoneware-jar/front.webp | Bin 0 -> 58252 bytes .../products/fowey-stoneware-jar/main.webp | Bin 0 -> 70580 bytes .../img/products/fowey-stoneware-jar/top.webp | Bin 0 -> 49366 bytes .../fretwork-bookcase-cabinet/front.webp | Bin 0 -> 45296 bytes .../fretwork-bookcase-cabinet/main.webp | Bin 0 -> 93060 bytes .../fretwork-bookcase-cabinet/side.webp | Bin 0 -> 20032 bytes .../fretwork-bookcase-cabinet/top.webp | Bin 0 -> 56836 bytes .../front.webp | Bin 0 -> 48412 bytes .../gothic-revival-chest-of-drawers/main.webp | Bin 0 -> 114592 bytes .../gothic-revival-chest-of-drawers/side.webp | Bin 0 -> 22150 bytes .../gothic-revival-chest-of-drawers/top.webp | Bin 0 -> 64922 bytes .../gothic-revival-cupboard/front.webp | Bin 0 -> 55872 bytes .../gothic-revival-cupboard/main.webp | Bin 0 -> 92580 bytes .../gothic-revival-cupboard/side.webp | Bin 0 -> 19332 bytes .../products/gothic-revival-cupboard/top.webp | Bin 0 -> 62754 bytes .../gothic-revival-hall-chair/front.webp | Bin 0 -> 55490 bytes .../gothic-revival-hall-chair/main.webp | Bin 0 -> 80966 bytes .../gothic-revival-hall-chair/side.webp | Bin 0 -> 16678 bytes .../gothic-revival-low-table/front.webp | Bin 0 -> 84654 bytes .../gothic-revival-low-table/main.webp | Bin 0 -> 108540 bytes .../gothic-revival-low-table/top.webp | Bin 0 -> 74738 bytes .../grand-tour-marble-bust/front.webp | Bin 0 -> 39290 bytes .../products/grand-tour-marble-bust/main.webp | Bin 0 -> 52730 bytes .../products/grand-tour-marble-bust/side.webp | Bin 0 -> 45074 bytes .../products/hambledon-chess-set/front.webp | Bin 0 -> 59990 bytes .../products/hambledon-chess-set/main.webp | Bin 0 -> 115942 bytes .../products/hambledon-chess-set/side.webp | Bin 0 -> 32444 bytes .../img/products/hambledon-chess-set/top.webp | Bin 0 -> 92662 bytes .../products/hartland-sideboard/front.webp | Bin 0 -> 65036 bytes .../img/products/hartland-sideboard/main.webp | Bin 0 -> 99184 bytes .../img/products/hartland-sideboard/side.webp | Bin 0 -> 36702 bytes .../img/products/hartland-sideboard/top.webp | Bin 0 -> 47266 bytes .../lamorna-swivel-lounge-chair/front.webp | Bin 0 -> 103502 bytes .../lamorna-swivel-lounge-chair/main.webp | Bin 0 -> 143356 bytes .../lamorna-swivel-lounge-chair/side.webp | Bin 0 -> 47208 bytes .../lamorna-swivel-lounge-chair/top.webp | Bin 0 -> 108900 bytes .../img/products/luohan-daybed/front.webp | Bin 0 -> 47714 bytes .../img/products/luohan-daybed/main.webp | Bin 0 -> 109516 bytes .../img/products/luohan-daybed/side.webp | Bin 0 -> 37324 bytes .../img/products/luohan-daybed/top.webp | Bin 0 -> 327970 bytes .../mahogany-breakfast-table/front.webp | Bin 0 -> 37052 bytes .../mahogany-breakfast-table/main.webp | Bin 0 -> 54286 bytes .../mahogany-breakfast-table/top.webp | Bin 0 -> 48552 bytes .../mahogany-jardiniere-stand/front.webp | Bin 0 -> 29238 bytes .../mahogany-jardiniere-stand/main.webp | Bin 0 -> 46820 bytes .../mahogany-jardiniere-stand/top.webp | Bin 0 -> 39414 bytes .../products/moss-velvet-fauteuil/front.webp | Bin 0 -> 51784 bytes .../products/moss-velvet-fauteuil/main.webp | Bin 0 -> 59976 bytes .../products/moss-velvet-fauteuil/side.webp | Bin 0 -> 31878 bytes .../products/moss-velvet-fauteuil/top.webp | Bin 0 -> 135128 bytes .../img/products/mylor-armchair/front.webp | Bin 0 -> 47572 bytes .../img/products/mylor-armchair/main.webp | Bin 0 -> 67410 bytes .../img/products/mylor-armchair/side.webp | Bin 0 -> 54434 bytes .../img/products/mylor-armchair/top.webp | Bin 0 -> 48762 bytes .../octagonal-palace-lantern/front.webp | Bin 0 -> 105684 bytes .../octagonal-palace-lantern/main.webp | Bin 0 -> 127090 bytes .../octagonal-palace-lantern/top.webp | Bin 0 -> 62700 bytes .../products/orford-coffee-table/front.webp | Bin 0 -> 38316 bytes .../products/orford-coffee-table/main.webp | Bin 0 -> 81228 bytes .../img/products/orford-coffee-table/top.webp | Bin 0 -> 28160 bytes .../painted-porcelain-oil-lamp/front.webp | Bin 0 -> 29780 bytes .../painted-porcelain-oil-lamp/main.webp | Bin 0 -> 47174 bytes .../painted-porcelain-oil-lamp/top.webp | Bin 0 -> 102722 bytes .../products/porthallow-ottoman/front.webp | Bin 0 -> 225470 bytes .../img/products/porthallow-ottoman/main.webp | Bin 0 -> 303862 bytes .../img/products/porthallow-ottoman/side.webp | Bin 0 -> 126396 bytes .../img/products/porthallow-ottoman/top.webp | Bin 0 -> 264744 bytes .../products/ravenglass-wall-light/front.webp | Bin 0 -> 33128 bytes .../products/ravenglass-wall-light/main.webp | Bin 0 -> 59162 bytes .../products/ravenglass-wall-light/side.webp | Bin 0 -> 44686 bytes .../products/ravenglass-wall-light/top.webp | Bin 0 -> 26426 bytes .../recessed-leg-altar-table/front.webp | Bin 0 -> 36800 bytes .../recessed-leg-altar-table/main.webp | Bin 0 -> 69050 bytes .../recessed-leg-altar-table/side.webp | Bin 0 -> 53492 bytes .../recessed-leg-altar-table/top.webp | Bin 0 -> 44056 bytes .../products/selsey-globe-pendant/front.webp | Bin 0 -> 15424 bytes .../products/selsey-globe-pendant/main.webp | Bin 0 -> 21828 bytes .../products/selsey-globe-pendant/top.webp | Bin 0 -> 44204 bytes .../products/square-elmwood-stool/front.webp | Bin 0 -> 34232 bytes .../products/square-elmwood-stool/main.webp | Bin 0 -> 68298 bytes .../products/square-elmwood-stool/side.webp | Bin 0 -> 27836 bytes .../products/square-elmwood-stool/top.webp | Bin 0 -> 117658 bytes .../img/products/tamar-bottle-vase/front.webp | Bin 0 -> 16824 bytes .../img/products/tamar-bottle-vase/main.webp | Bin 0 -> 22726 bytes .../img/products/tamar-bottle-vase/top.webp | Bin 0 -> 23976 bytes .../products/thorpe-coffee-table/front.webp | Bin 0 -> 46664 bytes .../products/thorpe-coffee-table/main.webp | Bin 0 -> 95298 bytes .../products/thorpe-coffee-table/side.webp | Bin 0 -> 92540 bytes .../img/products/thorpe-coffee-table/top.webp | Bin 0 -> 229070 bytes .../img/products/tresco-sofa/front.webp | Bin 0 -> 57770 bytes .../img/products/tresco-sofa/main.webp | Bin 0 -> 67092 bytes .../img/products/tresco-sofa/side.webp | Bin 0 -> 38428 bytes .../img/products/tresco-sofa/top.webp | Bin 0 -> 42912 bytes .../two-tier-brass-chandelier/front.webp | Bin 0 -> 83324 bytes .../two-tier-brass-chandelier/main.webp | Bin 0 -> 165098 bytes .../two-tier-brass-chandelier/top.webp | Bin 0 -> 234436 bytes .../products/uffington-horse-head/front.webp | Bin 0 -> 37140 bytes .../products/uffington-horse-head/main.webp | Bin 0 -> 53854 bytes .../products/uffington-horse-head/side.webp | Bin 0 -> 44470 bytes .../products/wenlock-writing-table/front.webp | Bin 0 -> 42526 bytes .../products/wenlock-writing-table/main.webp | Bin 0 -> 100946 bytes .../products/wenlock-writing-table/side.webp | Bin 0 -> 36312 bytes .../products/wenlock-writing-table/top.webp | Bin 0 -> 155972 bytes .../products/yoke-back-armchair/front.webp | Bin 0 -> 39366 bytes .../img/products/yoke-back-armchair/main.webp | Bin 0 -> 72338 bytes .../img/products/yoke-back-armchair/side.webp | Bin 0 -> 28412 bytes .../img/products/yoke-back-armchair/top.webp | Bin 0 -> 62986 bytes .../products/zennor-dining-chair/front.webp | Bin 0 -> 22404 bytes .../products/zennor-dining-chair/main.webp | Bin 0 -> 34394 bytes .../products/zennor-dining-chair/side.webp | Bin 0 -> 22820 bytes .../img/products/zennor-dining-chair/top.webp | Bin 0 -> 30072 bytes packages/wrenfield/index.html | 174 ++ packages/wrenfield/manifest.webmanifest | 18 + .../wrenfield/models/ebonised-bergere.glb | Bin 0 -> 525248 bytes .../models/fretwork-bookcase-cabinet.glb | Bin 0 -> 707956 bytes .../models/grand-tour-marble-bust.glb | Bin 0 -> 638088 bytes .../models/lamorna-swivel-lounge-chair.glb | Bin 0 -> 407624 bytes .../wrenfield/models/orford-coffee-table.glb | Bin 0 -> 282356 bytes .../wrenfield/models/tamar-bottle-vase.glb | Bin 0 -> 296380 bytes packages/wrenfield/models/tresco-sofa.glb | Bin 0 -> 220524 bytes .../wrenfield/models/yoke-back-armchair.glb | Bin 0 -> 263760 bytes packages/wrenfield/package.json | 35 + packages/wrenfield/serve.js | 65 + packages/wrenfield/shell.css | 1174 ++++++++ packages/wrenfield/shell.quark | 243 ++ packages/wrenfield/support/tests/app.ts | 182 ++ .../wrenfield/support/tests/backend.test.ts | 30 + .../support/tests/backend/golden.mjs | 300 ++ .../support/tests/backend/scenario.js | 1062 +++++++ .../support/tests/backend/worker.mjs | 135 + .../wrenfield/support/tests/bag.view.test.ts | 18 + .../support/tests/browser/browser.js | 25 + .../wrenfield/support/tests/browser/run.mjs | 315 ++ .../wrenfield/support/tests/browser/shot.mjs | 406 +++ .../support/tests/checkout.view.test.ts | 41 + .../wrenfield/support/tests/home.view.test.ts | 11 + .../support/tests/navigation.view.test.ts | 41 + .../support/tests/order.view.test.ts | 16 + .../support/tests/product.view.test.ts | 18 + .../wrenfield/support/tests/serve.test.ts | 55 + .../support/tests/service-worker.view.test.ts | 17 + .../wrenfield/support/tests/shop.view.test.ts | 33 + packages/wrenfield/sw.js | 147 + packages/wrenfield/tsconfig.json | 5 + packages/wrenfield/views/account/account.css | 84 + packages/wrenfield/views/account/account.html | 98 + .../wrenfield/views/account/account.quark | 42 + packages/wrenfield/views/bag/bag.css | 68 + packages/wrenfield/views/bag/bag.html | 41 + packages/wrenfield/views/bag/bag.quark | 11 + .../wrenfield/views/checkout/checkout.css | 235 ++ .../wrenfield/views/checkout/checkout.html | 52 + .../wrenfield/views/checkout/checkout.quark | 33 + .../wrenfield/views/checkout/complete.css | 70 + .../wrenfield/views/checkout/complete.html | 53 + .../wrenfield/views/checkout/complete.quark | 23 + .../wrenfield/views/checkout/delivery.html | 27 + .../wrenfield/views/checkout/delivery.quark | 15 + .../wrenfield/views/checkout/details.html | 28 + .../wrenfield/views/checkout/details.quark | 5 + .../wrenfield/views/checkout/payment.html | 24 + .../wrenfield/views/checkout/payment.quark | 7 + packages/wrenfield/views/checkout/review.html | 61 + .../wrenfield/views/checkout/review.quark | 34 + .../delivery-returns/delivery-returns.css | 113 + .../delivery-returns/delivery-returns.html | 179 ++ packages/wrenfield/views/home/home.css | 81 + packages/wrenfield/views/home/home.html | 89 + packages/wrenfield/views/home/home.quark | 24 + .../wrenfield/views/not-found/not-found.css | 28 + .../wrenfield/views/not-found/not-found.html | 13 + packages/wrenfield/views/order/order.css | 126 + packages/wrenfield/views/order/order.html | 87 + packages/wrenfield/views/order/order.quark | 32 + packages/wrenfield/views/product/product.css | 340 +++ packages/wrenfield/views/product/product.html | 138 + .../wrenfield/views/product/product.quark | 191 ++ packages/wrenfield/views/saved/saved.css | 10 + packages/wrenfield/views/saved/saved.html | 22 + packages/wrenfield/views/saved/saved.quark | 4 + packages/wrenfield/views/shop/shop.css | 166 + packages/wrenfield/views/shop/shop.html | 107 + packages/wrenfield/views/shop/shop.quark | 123 + packages/wrenfield/views/story/story.css | 200 ++ packages/wrenfield/views/story/story.html | 101 + rush.json | 14 + support/docs/DOCS_PIPELINE.md | 3 +- 586 files changed, 15080 insertions(+), 1355 deletions(-) create mode 100644 common/changes/@excom/heft-rig/test-rig_2026-09-30-release-notes.json create mode 100644 common/changes/@excom/kit-devtools/test-rig_2026-09-30-declarations.json create mode 100644 common/changes/@excom/neutron/test-rig_2026-09-30-declarations.json create mode 100644 common/changes/@excom/nucleus-dom/test-rig_2026-09-30-initial.json create mode 100644 common/changes/@excom/nucleus-test/test-rig_2026-09-30-initial.json create mode 100644 common/changes/@excom/quark-formatter/test-rig_2026-09-30-declarations.json create mode 100644 common/changes/@excom/quark-parser/test-rig_2026-09-30-declarations.json create mode 100644 common/changes/@excom/quark/test-rig_2026-09-30-declarations.json create mode 100644 common/changes/@excom/spa-route/test-rig_2026-09-30-fallback.json delete mode 100644 packages/heft-rig/profiles/default/config/command-shim.ts delete mode 100644 packages/heft-rig/profiles/default/config/test-utils.ts create mode 100644 packages/heft-rig/scripts/release-notes.mjs create mode 100644 packages/heft-rig/support/tests/dts-paths.test.ts create mode 100644 packages/heft-rig/support/tests/release-notes.test.ts create mode 100644 packages/nucleus-dom/config/rig.json create mode 100644 packages/nucleus-dom/index.ts create mode 100644 packages/nucleus-dom/package.json create mode 100644 packages/nucleus-dom/src/command.ts create mode 100644 packages/nucleus-dom/src/dom.ts create mode 100644 packages/nucleus-dom/src/missing-apis.ts create mode 100644 packages/nucleus-dom/src/mutation-observer.ts create mode 100644 packages/nucleus-dom/src/query-selector.ts create mode 100644 packages/nucleus-dom/src/window.ts create mode 100644 packages/nucleus-dom/support/docs/README.md create mode 100644 packages/nucleus-dom/support/tests/command.test.ts create mode 100644 packages/nucleus-dom/support/tests/create-dom.test.ts create mode 100644 packages/nucleus-dom/support/tests/mutation-observer.test.ts create mode 100644 packages/nucleus-dom/support/tests/query-selector.test.ts create mode 100644 packages/nucleus-dom/tsconfig.json create mode 100644 packages/nucleus-test/config/rig.json create mode 100644 packages/nucleus-test/index.ts create mode 100644 packages/nucleus-test/package.json create mode 100644 packages/nucleus-test/setup.ts create mode 100644 packages/nucleus-test/src/console.ts create mode 100644 packages/nucleus-test/src/files.ts create mode 100644 packages/nucleus-test/src/listeners.ts create mode 100644 packages/nucleus-test/src/matchers.ts create mode 100644 packages/nucleus-test/src/node.ts create mode 100644 packages/nucleus-test/src/serve-static.ts create mode 100644 packages/nucleus-test/src/utils.ts create mode 100644 packages/nucleus-test/support/docs/README.md create mode 100644 packages/nucleus-test/support/tests/files.test.ts create mode 100644 packages/nucleus-test/support/tests/serve-static.test.ts rename packages/{heft-rig => nucleus-test}/support/tests/setup.test.ts (56%) rename packages/{heft-rig/support/tests/test-utils.test.ts => nucleus-test/support/tests/utils.test.ts} (76%) create mode 100644 packages/nucleus-test/tsconfig.json delete mode 100644 packages/spa-route/support/tests/helpers.ts create mode 100644 packages/spa-route/support/tests/testing.test.ts create mode 100644 packages/spa-route/testing.ts create mode 100644 packages/wrenfield/.gitignore create mode 100644 packages/wrenfield/CREDITS.md create mode 100644 packages/wrenfield/README.md create mode 100644 packages/wrenfield/backend/account.js create mode 100644 packages/wrenfield/backend/bag.js create mode 100644 packages/wrenfield/backend/checkout.js create mode 100644 packages/wrenfield/backend/config.js create mode 100644 packages/wrenfield/backend/shop.js create mode 100644 packages/wrenfield/config/rig.json create mode 100644 packages/wrenfield/data/catalog.json create mode 100644 packages/wrenfield/img/apple-touch-icon.png create mode 100644 packages/wrenfield/img/icon-192.png create mode 100644 packages/wrenfield/img/icon-512.png create mode 100644 packages/wrenfield/img/icon-maskable-512.png create mode 100644 packages/wrenfield/img/icons.svg create mode 100644 packages/wrenfield/img/logo.svg create mode 100644 packages/wrenfield/img/products/amble-chest-of-drawers/front.webp create mode 100644 packages/wrenfield/img/products/amble-chest-of-drawers/main.webp create mode 100644 packages/wrenfield/img/products/amble-chest-of-drawers/side.webp create mode 100644 packages/wrenfield/img/products/amble-chest-of-drawers/top.webp create mode 100644 packages/wrenfield/img/products/blue-and-white-transferware-vase/front.webp create mode 100644 packages/wrenfield/img/products/blue-and-white-transferware-vase/main.webp create mode 100644 packages/wrenfield/img/products/blue-and-white-transferware-vase/top.webp create mode 100644 packages/wrenfield/img/products/bosham-chandelier/front.webp create mode 100644 packages/wrenfield/img/products/bosham-chandelier/main.webp create mode 100644 packages/wrenfield/img/products/bosham-chandelier/top.webp create mode 100644 packages/wrenfield/img/products/brass-chandelier-with-glass-drops/front.webp create mode 100644 packages/wrenfield/img/products/brass-chandelier-with-glass-drops/main.webp create mode 100644 packages/wrenfield/img/products/brass-chandelier-with-glass-drops/top.webp create mode 100644 packages/wrenfield/img/products/carved-ebonised-console/front.webp create mode 100644 packages/wrenfield/img/products/carved-ebonised-console/main.webp create mode 100644 packages/wrenfield/img/products/carved-ebonised-console/side.webp create mode 100644 packages/wrenfield/img/products/carved-ebonised-console/top.webp create mode 100644 packages/wrenfield/img/products/carved-walnut-canape/front.webp create mode 100644 packages/wrenfield/img/products/carved-walnut-canape/main.webp create mode 100644 packages/wrenfield/img/products/carved-walnut-canape/side.webp create mode 100644 packages/wrenfield/img/products/carved-walnut-canape/top.webp create mode 100644 packages/wrenfield/img/products/coldharbour-etagere/front.webp create mode 100644 packages/wrenfield/img/products/coldharbour-etagere/main.webp create mode 100644 packages/wrenfield/img/products/coldharbour-etagere/side.webp create mode 100644 packages/wrenfield/img/products/coldharbour-etagere/top.webp create mode 100644 packages/wrenfield/img/products/ebonised-bedside-cabinet/front.webp create mode 100644 packages/wrenfield/img/products/ebonised-bedside-cabinet/main.webp create mode 100644 packages/wrenfield/img/products/ebonised-bedside-cabinet/side.webp create mode 100644 packages/wrenfield/img/products/ebonised-bedside-cabinet/top.webp create mode 100644 packages/wrenfield/img/products/ebonised-bergere/front.webp create mode 100644 packages/wrenfield/img/products/ebonised-bergere/main.webp create mode 100644 packages/wrenfield/img/products/ebonised-bergere/side.webp create mode 100644 packages/wrenfield/img/products/ebonised-bergere/top.webp create mode 100644 packages/wrenfield/img/products/eddystone-coffee-table/front.webp create mode 100644 packages/wrenfield/img/products/eddystone-coffee-table/main.webp create mode 100644 packages/wrenfield/img/products/eddystone-coffee-table/top.webp create mode 100644 packages/wrenfield/img/products/elmwood-altar-coffer/front.webp create mode 100644 packages/wrenfield/img/products/elmwood-altar-coffer/main.webp create mode 100644 packages/wrenfield/img/products/elmwood-altar-coffer/side.webp create mode 100644 packages/wrenfield/img/products/elmwood-altar-coffer/top.webp create mode 100644 packages/wrenfield/img/products/elmwood-tea-table/front.webp create mode 100644 packages/wrenfield/img/products/elmwood-tea-table/main.webp create mode 100644 packages/wrenfield/img/products/elmwood-tea-table/top.webp create mode 100644 packages/wrenfield/img/products/engraved-brass-floor-vase/front.webp create mode 100644 packages/wrenfield/img/products/engraved-brass-floor-vase/main.webp create mode 100644 packages/wrenfield/img/products/engraved-brass-floor-vase/top.webp create mode 100644 packages/wrenfield/img/products/fowey-stoneware-jar/front.webp create mode 100644 packages/wrenfield/img/products/fowey-stoneware-jar/main.webp create mode 100644 packages/wrenfield/img/products/fowey-stoneware-jar/top.webp create mode 100644 packages/wrenfield/img/products/fretwork-bookcase-cabinet/front.webp create mode 100644 packages/wrenfield/img/products/fretwork-bookcase-cabinet/main.webp create mode 100644 packages/wrenfield/img/products/fretwork-bookcase-cabinet/side.webp create mode 100644 packages/wrenfield/img/products/fretwork-bookcase-cabinet/top.webp create mode 100644 packages/wrenfield/img/products/gothic-revival-chest-of-drawers/front.webp create mode 100644 packages/wrenfield/img/products/gothic-revival-chest-of-drawers/main.webp create mode 100644 packages/wrenfield/img/products/gothic-revival-chest-of-drawers/side.webp create mode 100644 packages/wrenfield/img/products/gothic-revival-chest-of-drawers/top.webp create mode 100644 packages/wrenfield/img/products/gothic-revival-cupboard/front.webp create mode 100644 packages/wrenfield/img/products/gothic-revival-cupboard/main.webp create mode 100644 packages/wrenfield/img/products/gothic-revival-cupboard/side.webp create mode 100644 packages/wrenfield/img/products/gothic-revival-cupboard/top.webp create mode 100644 packages/wrenfield/img/products/gothic-revival-hall-chair/front.webp create mode 100644 packages/wrenfield/img/products/gothic-revival-hall-chair/main.webp create mode 100644 packages/wrenfield/img/products/gothic-revival-hall-chair/side.webp create mode 100644 packages/wrenfield/img/products/gothic-revival-low-table/front.webp create mode 100644 packages/wrenfield/img/products/gothic-revival-low-table/main.webp create mode 100644 packages/wrenfield/img/products/gothic-revival-low-table/top.webp create mode 100644 packages/wrenfield/img/products/grand-tour-marble-bust/front.webp create mode 100644 packages/wrenfield/img/products/grand-tour-marble-bust/main.webp create mode 100644 packages/wrenfield/img/products/grand-tour-marble-bust/side.webp create mode 100644 packages/wrenfield/img/products/hambledon-chess-set/front.webp create mode 100644 packages/wrenfield/img/products/hambledon-chess-set/main.webp create mode 100644 packages/wrenfield/img/products/hambledon-chess-set/side.webp create mode 100644 packages/wrenfield/img/products/hambledon-chess-set/top.webp create mode 100644 packages/wrenfield/img/products/hartland-sideboard/front.webp create mode 100644 packages/wrenfield/img/products/hartland-sideboard/main.webp create mode 100644 packages/wrenfield/img/products/hartland-sideboard/side.webp create mode 100644 packages/wrenfield/img/products/hartland-sideboard/top.webp create mode 100644 packages/wrenfield/img/products/lamorna-swivel-lounge-chair/front.webp create mode 100644 packages/wrenfield/img/products/lamorna-swivel-lounge-chair/main.webp create mode 100644 packages/wrenfield/img/products/lamorna-swivel-lounge-chair/side.webp create mode 100644 packages/wrenfield/img/products/lamorna-swivel-lounge-chair/top.webp create mode 100644 packages/wrenfield/img/products/luohan-daybed/front.webp create mode 100644 packages/wrenfield/img/products/luohan-daybed/main.webp create mode 100644 packages/wrenfield/img/products/luohan-daybed/side.webp create mode 100644 packages/wrenfield/img/products/luohan-daybed/top.webp create mode 100644 packages/wrenfield/img/products/mahogany-breakfast-table/front.webp create mode 100644 packages/wrenfield/img/products/mahogany-breakfast-table/main.webp create mode 100644 packages/wrenfield/img/products/mahogany-breakfast-table/top.webp create mode 100644 packages/wrenfield/img/products/mahogany-jardiniere-stand/front.webp create mode 100644 packages/wrenfield/img/products/mahogany-jardiniere-stand/main.webp create mode 100644 packages/wrenfield/img/products/mahogany-jardiniere-stand/top.webp create mode 100644 packages/wrenfield/img/products/moss-velvet-fauteuil/front.webp create mode 100644 packages/wrenfield/img/products/moss-velvet-fauteuil/main.webp create mode 100644 packages/wrenfield/img/products/moss-velvet-fauteuil/side.webp create mode 100644 packages/wrenfield/img/products/moss-velvet-fauteuil/top.webp create mode 100644 packages/wrenfield/img/products/mylor-armchair/front.webp create mode 100644 packages/wrenfield/img/products/mylor-armchair/main.webp create mode 100644 packages/wrenfield/img/products/mylor-armchair/side.webp create mode 100644 packages/wrenfield/img/products/mylor-armchair/top.webp create mode 100644 packages/wrenfield/img/products/octagonal-palace-lantern/front.webp create mode 100644 packages/wrenfield/img/products/octagonal-palace-lantern/main.webp create mode 100644 packages/wrenfield/img/products/octagonal-palace-lantern/top.webp create mode 100644 packages/wrenfield/img/products/orford-coffee-table/front.webp create mode 100644 packages/wrenfield/img/products/orford-coffee-table/main.webp create mode 100644 packages/wrenfield/img/products/orford-coffee-table/top.webp create mode 100644 packages/wrenfield/img/products/painted-porcelain-oil-lamp/front.webp create mode 100644 packages/wrenfield/img/products/painted-porcelain-oil-lamp/main.webp create mode 100644 packages/wrenfield/img/products/painted-porcelain-oil-lamp/top.webp create mode 100644 packages/wrenfield/img/products/porthallow-ottoman/front.webp create mode 100644 packages/wrenfield/img/products/porthallow-ottoman/main.webp create mode 100644 packages/wrenfield/img/products/porthallow-ottoman/side.webp create mode 100644 packages/wrenfield/img/products/porthallow-ottoman/top.webp create mode 100644 packages/wrenfield/img/products/ravenglass-wall-light/front.webp create mode 100644 packages/wrenfield/img/products/ravenglass-wall-light/main.webp create mode 100644 packages/wrenfield/img/products/ravenglass-wall-light/side.webp create mode 100644 packages/wrenfield/img/products/ravenglass-wall-light/top.webp create mode 100644 packages/wrenfield/img/products/recessed-leg-altar-table/front.webp create mode 100644 packages/wrenfield/img/products/recessed-leg-altar-table/main.webp create mode 100644 packages/wrenfield/img/products/recessed-leg-altar-table/side.webp create mode 100644 packages/wrenfield/img/products/recessed-leg-altar-table/top.webp create mode 100644 packages/wrenfield/img/products/selsey-globe-pendant/front.webp create mode 100644 packages/wrenfield/img/products/selsey-globe-pendant/main.webp create mode 100644 packages/wrenfield/img/products/selsey-globe-pendant/top.webp create mode 100644 packages/wrenfield/img/products/square-elmwood-stool/front.webp create mode 100644 packages/wrenfield/img/products/square-elmwood-stool/main.webp create mode 100644 packages/wrenfield/img/products/square-elmwood-stool/side.webp create mode 100644 packages/wrenfield/img/products/square-elmwood-stool/top.webp create mode 100644 packages/wrenfield/img/products/tamar-bottle-vase/front.webp create mode 100644 packages/wrenfield/img/products/tamar-bottle-vase/main.webp create mode 100644 packages/wrenfield/img/products/tamar-bottle-vase/top.webp create mode 100644 packages/wrenfield/img/products/thorpe-coffee-table/front.webp create mode 100644 packages/wrenfield/img/products/thorpe-coffee-table/main.webp create mode 100644 packages/wrenfield/img/products/thorpe-coffee-table/side.webp create mode 100644 packages/wrenfield/img/products/thorpe-coffee-table/top.webp create mode 100644 packages/wrenfield/img/products/tresco-sofa/front.webp create mode 100644 packages/wrenfield/img/products/tresco-sofa/main.webp create mode 100644 packages/wrenfield/img/products/tresco-sofa/side.webp create mode 100644 packages/wrenfield/img/products/tresco-sofa/top.webp create mode 100644 packages/wrenfield/img/products/two-tier-brass-chandelier/front.webp create mode 100644 packages/wrenfield/img/products/two-tier-brass-chandelier/main.webp create mode 100644 packages/wrenfield/img/products/two-tier-brass-chandelier/top.webp create mode 100644 packages/wrenfield/img/products/uffington-horse-head/front.webp create mode 100644 packages/wrenfield/img/products/uffington-horse-head/main.webp create mode 100644 packages/wrenfield/img/products/uffington-horse-head/side.webp create mode 100644 packages/wrenfield/img/products/wenlock-writing-table/front.webp create mode 100644 packages/wrenfield/img/products/wenlock-writing-table/main.webp create mode 100644 packages/wrenfield/img/products/wenlock-writing-table/side.webp create mode 100644 packages/wrenfield/img/products/wenlock-writing-table/top.webp create mode 100644 packages/wrenfield/img/products/yoke-back-armchair/front.webp create mode 100644 packages/wrenfield/img/products/yoke-back-armchair/main.webp create mode 100644 packages/wrenfield/img/products/yoke-back-armchair/side.webp create mode 100644 packages/wrenfield/img/products/yoke-back-armchair/top.webp create mode 100644 packages/wrenfield/img/products/zennor-dining-chair/front.webp create mode 100644 packages/wrenfield/img/products/zennor-dining-chair/main.webp create mode 100644 packages/wrenfield/img/products/zennor-dining-chair/side.webp create mode 100644 packages/wrenfield/img/products/zennor-dining-chair/top.webp create mode 100644 packages/wrenfield/index.html create mode 100644 packages/wrenfield/manifest.webmanifest create mode 100644 packages/wrenfield/models/ebonised-bergere.glb create mode 100644 packages/wrenfield/models/fretwork-bookcase-cabinet.glb create mode 100644 packages/wrenfield/models/grand-tour-marble-bust.glb create mode 100644 packages/wrenfield/models/lamorna-swivel-lounge-chair.glb create mode 100644 packages/wrenfield/models/orford-coffee-table.glb create mode 100644 packages/wrenfield/models/tamar-bottle-vase.glb create mode 100644 packages/wrenfield/models/tresco-sofa.glb create mode 100644 packages/wrenfield/models/yoke-back-armchair.glb create mode 100644 packages/wrenfield/package.json create mode 100644 packages/wrenfield/serve.js create mode 100644 packages/wrenfield/shell.css create mode 100644 packages/wrenfield/shell.quark create mode 100644 packages/wrenfield/support/tests/app.ts create mode 100644 packages/wrenfield/support/tests/backend.test.ts create mode 100644 packages/wrenfield/support/tests/backend/golden.mjs create mode 100644 packages/wrenfield/support/tests/backend/scenario.js create mode 100644 packages/wrenfield/support/tests/backend/worker.mjs create mode 100644 packages/wrenfield/support/tests/bag.view.test.ts create mode 100644 packages/wrenfield/support/tests/browser/browser.js create mode 100644 packages/wrenfield/support/tests/browser/run.mjs create mode 100644 packages/wrenfield/support/tests/browser/shot.mjs create mode 100644 packages/wrenfield/support/tests/checkout.view.test.ts create mode 100644 packages/wrenfield/support/tests/home.view.test.ts create mode 100644 packages/wrenfield/support/tests/navigation.view.test.ts create mode 100644 packages/wrenfield/support/tests/order.view.test.ts create mode 100644 packages/wrenfield/support/tests/product.view.test.ts create mode 100644 packages/wrenfield/support/tests/serve.test.ts create mode 100644 packages/wrenfield/support/tests/service-worker.view.test.ts create mode 100644 packages/wrenfield/support/tests/shop.view.test.ts create mode 100644 packages/wrenfield/sw.js create mode 100644 packages/wrenfield/tsconfig.json create mode 100644 packages/wrenfield/views/account/account.css create mode 100644 packages/wrenfield/views/account/account.html create mode 100644 packages/wrenfield/views/account/account.quark create mode 100644 packages/wrenfield/views/bag/bag.css create mode 100644 packages/wrenfield/views/bag/bag.html create mode 100644 packages/wrenfield/views/bag/bag.quark create mode 100644 packages/wrenfield/views/checkout/checkout.css create mode 100644 packages/wrenfield/views/checkout/checkout.html create mode 100644 packages/wrenfield/views/checkout/checkout.quark create mode 100644 packages/wrenfield/views/checkout/complete.css create mode 100644 packages/wrenfield/views/checkout/complete.html create mode 100644 packages/wrenfield/views/checkout/complete.quark create mode 100644 packages/wrenfield/views/checkout/delivery.html create mode 100644 packages/wrenfield/views/checkout/delivery.quark create mode 100644 packages/wrenfield/views/checkout/details.html create mode 100644 packages/wrenfield/views/checkout/details.quark create mode 100644 packages/wrenfield/views/checkout/payment.html create mode 100644 packages/wrenfield/views/checkout/payment.quark create mode 100644 packages/wrenfield/views/checkout/review.html create mode 100644 packages/wrenfield/views/checkout/review.quark create mode 100644 packages/wrenfield/views/delivery-returns/delivery-returns.css create mode 100644 packages/wrenfield/views/delivery-returns/delivery-returns.html create mode 100644 packages/wrenfield/views/home/home.css create mode 100644 packages/wrenfield/views/home/home.html create mode 100644 packages/wrenfield/views/home/home.quark create mode 100644 packages/wrenfield/views/not-found/not-found.css create mode 100644 packages/wrenfield/views/not-found/not-found.html create mode 100644 packages/wrenfield/views/order/order.css create mode 100644 packages/wrenfield/views/order/order.html create mode 100644 packages/wrenfield/views/order/order.quark create mode 100644 packages/wrenfield/views/product/product.css create mode 100644 packages/wrenfield/views/product/product.html create mode 100644 packages/wrenfield/views/product/product.quark create mode 100644 packages/wrenfield/views/saved/saved.css create mode 100644 packages/wrenfield/views/saved/saved.html create mode 100644 packages/wrenfield/views/saved/saved.quark create mode 100644 packages/wrenfield/views/shop/shop.css create mode 100644 packages/wrenfield/views/shop/shop.html create mode 100644 packages/wrenfield/views/shop/shop.quark create mode 100644 packages/wrenfield/views/story/story.css create mode 100644 packages/wrenfield/views/story/story.html diff --git a/.github/actions/setup-monorepo/action.yml b/.github/actions/setup-monorepo/action.yml index 16dfb1f..0264b95 100644 --- a/.github/actions/setup-monorepo/action.yml +++ b/.github/actions/setup-monorepo/action.yml @@ -7,7 +7,7 @@ runs: with: node-version: "24.13.0" - - uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4.2.0 + - uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0 with: version: 10 diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index df073c9..6949d97 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -61,7 +61,7 @@ jobs: key: size-baseline-${{ runner.os }}-${{ github.sha }} - name: Deploy to Cloudflare Pages - uses: cloudflare/wrangler-action@v3 + uses: cloudflare/wrangler-action@v4 with: apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 51dace3..dca2c20 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -69,7 +69,7 @@ jobs: - uses: actions/setup-node@v6 with: node-version: "24.13.0" - - uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4.2.0 + - uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0 with: version: 10 @@ -82,14 +82,14 @@ jobs: run: pnpm dlx @cyclonedx/cdxgen -t pnpm --no-install-deps --no-babel --spec-version 1.6 -o bom.json - name: Upload SBOM as Artifact - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: sbom-cyclonedx.json path: bom.json - name: Grype Dependency Scanner (Report) id: scan-package - uses: anchore/scan-action@40a61b52209e9d50e87917c5b901783d546b12d0 + uses: anchore/scan-action@27805bf3b4e84b4a5c980df22ed233c00390a439 # v7.4.2 with: sbom: bom.json fail-build: false @@ -97,7 +97,7 @@ jobs: timeout-minutes: 10 - name: Upload Grype SARIF Results - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: grype-scan-results.sarif path: ${{ steps.scan-package.outputs.sarif }} diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 644c53d..aad0579 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -136,7 +136,7 @@ jobs: path: size-baseline key: size-baseline-${{ runner.os }}-${{ github.sha }} - name: Deploy to Cloudflare Pages - uses: cloudflare/wrangler-action@v3 + uses: cloudflare/wrangler-action@v4 with: apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} diff --git a/README.md b/README.md index 091252c..b07ee3b 100644 --- a/README.md +++ b/README.md @@ -18,22 +18,22 @@ Your HTML __*is*__ the app! Drop-in custom elements that each have a single resp ## How it's different from existing UI solutions -- **Back to the future** Welcome back to building static HTML5 apps. A break from complex JavaScript apps that compile to HTML. -- **Little to no JavaScript** You no longer need to write JS for the vast majority of UI cases. You may still call-out to your own pure functions for complex cases. -- **Native++** It's real HTML. With a separate, synergistic guest: Quark. -- **No magic** No special frameworks, build processes, rendering wizardry, or "HTML-in-my-JS" / "JS-in-my-HTML" DSLs. -- **Progressively enhanced** Drop into existing static/server-side-rendered sites. Neutron and Quark can also be used independently. -- **Fully composable** Templates, templating, behavior, and custom logic are all decoupled & robust. -- **Reactive State Machine** A simple, reliable, declarative syntax for your business logic - Quark. -- **No reconciliation tax** No large memory copies of state/DOM to be rebuilt, diffed against the DOM, recompiled with every state change. -- **Lightweight** All Nucleus Kit elements + Quark + Neutron have a smaller footprint (just over ~50kb compressed) than some UI framework cores alone. +- **Back to the future** — Welcome back to building static HTML5 apps. A break from complex JavaScript apps that compile to HTML. +- **Little to no JavaScript** — You no longer need to write JS for the vast majority of UI cases. You may still call-out to your own pure functions for complex cases. +- **Native++** — It's real HTML. With a separate, synergistic guest: Quark. +- **No magic** — No special frameworks, build processes, rendering wizardry, or "HTML-in-my-JS" / "JS-in-my-HTML" DSLs. +- **Progressively enhanced** — Drop into existing static/server-side-rendered sites. Nucleus elements and Quark can also be used independently. +- **Fully composable** — Templates, templating, behavior, and custom logic are all decoupled & robust. +- **Reactive State Machine** — A simple, reliable, declarative syntax for your business logic - Quark. +- **No reconciliation tax** — No large memory copies of state/DOM to be rebuilt, diffed against the DOM, recompiled with every state change. +- **Lightweight** — All Nucleus elements + Quark + Neutron have a smaller footprint (just over ~50kb compressed) than some UI framework cores alone. ## What's in the stack -- **Nucleus Kit elements** A growing catalog of drop-in custom elements, including: drawers, tabs, tables, lazy views, forms, routing, passkeys, data fetching, and more. -- **Quark** Like CSS, for document mutation. Select elements, bind data, stamp lists, wire events, and drive state transitions with simple rules instead of imperative code. -- **Valence.css** Semantic, classless CSS that caters to both native and custom elements, with themes, light/dark schemes, and design tokens. Designed for easy drop-in. Optional. -- **Neutron** The small JS factory used to author the elements above. Reach for it only when the Nucleus Kit catalog lacks what you need. Optional. +- **Nucleus Kit elements** — A growing catalog of drop-in custom elements, including: drawers, tabs, tables, lazy views, forms, routing, passkeys, data fetching, and more. +- **Quark** — Like CSS, for document mutation. Select elements, bind data, stamp lists, wire events, and drive state transitions with simple rules instead of imperative code. +- **Valence.css** — Semantic, classless CSS that caters to both native and custom elements, with themes, light/dark schemes, and design tokens. Designed for easy drop-in. Optional. +- **Neutron** — The small JS factory used to author the elements above. Reach for it only when the Nucleus Kit catalog lacks what you need. Optional. Every piece stands alone. Use one element on an existing site, or compose the whole stack into a full single-page app. `nucleus-kit` bundles it all behind one import; if you find you only use a handful of elements, install those packages à la carte instead (`@excom/content-drawer`, `@excom/quark-sheet`, …) and skip the rest. @@ -49,19 +49,25 @@ Then `import "@excom/nucleus-kit"` and `@import "@excom/nucleus-kit/basic.css"`. ## Why teams pick it -- **Significantly less app code** This is possible for two primary reasons. First, because Nucleus Kit elements are fully composable, configurable, and controllable, they will likely be compatible with the desired experience of most applications that use them; there is a low likelihood you will need to build your own. Secondly, Quark enables the majority of customization without needing to invite JavaScript. -- **No components** There is no "component" concept in this architecture. This allows application pieces to be maximally reusable and composable, as there is no home to entrap logic with a tightly coupled view. -- **One source of truth** Live markup _is_ the primary application state, so an entire family of bugs ("the UI disagrees with the model") cannot exist. -- **Fully inspectable** Open devtools and the entire application is in front of you: every value, every binding, and every transition. The state is the document/DOM, so all is plainly transparent to see, alter, and debug in your inspector. -- **Accessible by default** Declarative & ARIA state is the state... not a mirror someone forgot to update. -- **Human and machine friendly** Inspect [the docs site](https://excom.dev/nucleus) to see its declarativeness. No more `
` soups bound to untraceable JavaScript. Custom elements make for a beautifully declarative document. A page that is legible, addressable, and serializable is an ideal target for code generation, AI-assisted editing, and confident human auditing. Tools reason about the screen's exact state instead of inferring a component tree. Likewise, writing and debugging UI code by hand has never felt simpler. -- **Declarative business behavior** The vast majority of your proprietary behaviors exist as simple configurations, rather than buried inside imperative spaghetti code. +- **Significantly less app code** — This is possible for two primary reasons. First, because Nucleus Kit elements are fully composable, configurable, and controllable, they will likely be compatible with the desired experience of most applications that use them; there is a low likelihood you will need to build your own. Secondly, Quark enables the majority of customization without needing to invite JavaScript. +- **No components** — There is no "component" concept in this architecture. This allows application pieces to be maximally reusable and composable, as there is no home to entrap logic with a tightly coupled view. +- **One source of truth** — Live markup _is_ the primary application state, so an entire family of bugs ("the UI disagrees with the model") cannot exist. +- **Fully inspectable** — Open devtools and the entire application is in front of you: every value, every binding, and every transition. The state is the document/DOM, so all is plainly transparent to see, alter, and debug in your inspector. +- **Accessible by default** — Declarative & ARIA state is the state... not a mirror someone forgot to update. +- **Human and machine friendly** — Inspect [the docs site](https://excom.dev/nucleus) to see its declarativeness. No more `
` soups bound to untraceable JavaScript. Custom elements make for a beautifully declarative document. A page that is legible, addressable, and serializable is an ideal target for code generation, AI-assisted editing, and confident human auditing. Tools reason about the screen's exact state instead of inferring a component tree. Likewise, writing and debugging UI code by hand has never felt simpler. +- **Declarative business behavior** — The vast majority of your proprietary behaviors exist as simple configurations, rather than buried inside imperative spaghetti code. ## Where it shines Content-rich sites, complex data-driven business rules, progressive enhancement of static/server-rendered pages, embedded user experiences. See [Limitations](https://excom.dev/nucleus/docs/limitations) for the edges. -The Nucleus Stack also opens up new possibilities that were not easily served by any UI technology before: zero-build-tool UIs (e.g. on-the-fly generation), declarative & auditable target for LLM UI building, plain text assembly to rich UX (like a CMS), incremental upgrading of static/legacy SSR sites, resource-constrained web UIs (especially where scripting needs to be validated or limited, like an ATM), embedded UX (such as upgrading markdown with embedded functionality). +The Nucleus Stack also opens up new possibilities that were not easily served by any UI technology before: +- zero-build-tool UIs (e.g. on-the-fly generation) +- declarative & auditable target for LLM UI building +- programmatic assembly of rich UX (like a CMS) +- incremental upgrading of static/legacy SSR sites +- resource-constrained, secure, or sandboxed web UIs (especially where scripting needs to be validated or limited, like an ATM) +- embedded UX (such as upgrading markdown with embedded functionality) ## Dogfood is nutritious diff --git a/common/changes/@excom/heft-rig/test-rig_2026-09-30-release-notes.json b/common/changes/@excom/heft-rig/test-rig_2026-09-30-release-notes.json new file mode 100644 index 0000000..99921ad --- /dev/null +++ b/common/changes/@excom/heft-rig/test-rig_2026-09-30-release-notes.json @@ -0,0 +1,20 @@ +{ + "changes": [ + { + "packageName": "@excom/heft-rig", + "comment": "Add release notes: `build-package-metas.mjs` appends the `CHANGELOG.json` notes (minus dependency and `none` comments) to the README HTML as a closing `
`, and `build-docs.mjs` adds the three newest releases as `## Release notes` to the primary element's Markdown, so they reach the site and the LLM docs", + "type": "minor" + }, + { + "packageName": "@excom/heft-rig", + "comment": "Fix the library build's type declarations, which pointed at a folder outside the tarball; `verify-publish-outputs.mjs` now fails a publish when a declaration path dangles", + "type": "patch" + }, + { + "packageName": "@excom/heft-rig", + "comment": "Add `excom.umd: false` to skip the UMD bundle of a Node-only library (no CDN script in its install snippet), the `app` package type and unscoped names in `format-package-json`, and the test layer moved to `@excom/nucleus-dom` and `@excom/nucleus-test`", + "type": "minor" + } + ], + "packageName": "@excom/heft-rig" +} diff --git a/common/changes/@excom/kit-devtools/test-rig_2026-09-30-declarations.json b/common/changes/@excom/kit-devtools/test-rig_2026-09-30-declarations.json new file mode 100644 index 0000000..7c23c58 --- /dev/null +++ b/common/changes/@excom/kit-devtools/test-rig_2026-09-30-declarations.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@excom/kit-devtools", + "comment": "Fix the published type declarations: `index.d.ts` pointed at a folder that is not in the tarball, so consumers got `any` for named re-exports and missing-member errors for `export *` instead of the real types", + "type": "patch" + } + ], + "packageName": "@excom/kit-devtools" +} diff --git a/common/changes/@excom/neutron/test-rig_2026-09-30-declarations.json b/common/changes/@excom/neutron/test-rig_2026-09-30-declarations.json new file mode 100644 index 0000000..39832d1 --- /dev/null +++ b/common/changes/@excom/neutron/test-rig_2026-09-30-declarations.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@excom/neutron", + "comment": "Fix the published type declarations: `index.d.ts` pointed at a folder that is not in the tarball, so consumers got `any` for named re-exports and missing-member errors for `export *` instead of the real types", + "type": "patch" + } + ], + "packageName": "@excom/neutron" +} diff --git a/common/changes/@excom/nucleus-dom/test-rig_2026-09-30-initial.json b/common/changes/@excom/nucleus-dom/test-rig_2026-09-30-initial.json new file mode 100644 index 0000000..6293379 --- /dev/null +++ b/common/changes/@excom/nucleus-dom/test-rig_2026-09-30-initial.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@excom/nucleus-dom", + "comment": "Initial release of `@excom/nucleus-dom`: happy-dom pinned exactly, the browser-parity shims (document-wide queries with `:scope`, MutationObserver pin, the Command API, `checkVisibility`, `ServiceWorkerContainer`) and `createDom()`", + "type": "none" + } + ], + "packageName": "@excom/nucleus-dom" +} diff --git a/common/changes/@excom/nucleus-test/test-rig_2026-09-30-initial.json b/common/changes/@excom/nucleus-test/test-rig_2026-09-30-initial.json new file mode 100644 index 0000000..e37af19 --- /dev/null +++ b/common/changes/@excom/nucleus-test/test-rig_2026-09-30-initial.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@excom/nucleus-test", + "comment": "Initial release of `@excom/nucleus-test`: the vitest setup (shims, listener registry, `equalTag`, `toMatchListeners`, `toContainListeners`, the HTML snapshot serializer, the console node guard) and the test utilities (`fixture`, `click`, `wait`, `waitForEvent`, `spyFetch`)", + "type": "none" + } + ], + "packageName": "@excom/nucleus-test" +} diff --git a/common/changes/@excom/quark-formatter/test-rig_2026-09-30-declarations.json b/common/changes/@excom/quark-formatter/test-rig_2026-09-30-declarations.json new file mode 100644 index 0000000..65bacd4 --- /dev/null +++ b/common/changes/@excom/quark-formatter/test-rig_2026-09-30-declarations.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@excom/quark-formatter", + "comment": "Fix the published type declarations: `index.d.ts` pointed at a folder that is not in the tarball, so consumers got `any` for named re-exports and missing-member errors for `export *` instead of the real types", + "type": "patch" + } + ], + "packageName": "@excom/quark-formatter" +} diff --git a/common/changes/@excom/quark-parser/test-rig_2026-09-30-declarations.json b/common/changes/@excom/quark-parser/test-rig_2026-09-30-declarations.json new file mode 100644 index 0000000..9ffa3ed --- /dev/null +++ b/common/changes/@excom/quark-parser/test-rig_2026-09-30-declarations.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@excom/quark-parser", + "comment": "Fix the published type declarations: `index.d.ts` pointed at a folder that is not in the tarball, so consumers got `any` for named re-exports and missing-member errors for `export *` instead of the real types", + "type": "patch" + } + ], + "packageName": "@excom/quark-parser" +} diff --git a/common/changes/@excom/quark/test-rig_2026-09-30-declarations.json b/common/changes/@excom/quark/test-rig_2026-09-30-declarations.json new file mode 100644 index 0000000..069c532 --- /dev/null +++ b/common/changes/@excom/quark/test-rig_2026-09-30-declarations.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@excom/quark", + "comment": "Fix the published type declarations: `index.d.ts` pointed at a folder that is not in the tarball, so consumers got `any` for named re-exports and missing-member errors for `export *` instead of the real types", + "type": "patch" + } + ], + "packageName": "@excom/quark" +} diff --git a/common/changes/@excom/spa-route/test-rig_2026-09-30-fallback.json b/common/changes/@excom/spa-route/test-rig_2026-09-30-fallback.json new file mode 100644 index 0000000..b84bfe9 --- /dev/null +++ b/common/changes/@excom/spa-route/test-rig_2026-09-30-fallback.json @@ -0,0 +1,20 @@ +{ + "changes": [ + { + "packageName": "@excom/spa-route", + "comment": "Fix an issue where an `is-fallback` route stayed off after leaving a nested route for a URL no route matches: the fallback now checks which routes match the path instead of reading their `is-active` state, so its position among its siblings no longer matters while navigating, a page without a `spa-manager` gets a working fallback, a fallback inside a layout can activate on the layout's unmatched child paths, and other fallbacks never hold it off", + "type": "patch" + }, + { + "packageName": "@excom/spa-route", + "comment": "Add a warning when a `spa-manager` update settles by `render-timeout` while a route is still pending, so an empty first paint has a cause in the console at log level 2", + "type": "patch" + }, + { + "packageName": "@excom/spa-route", + "comment": "Add `@excom/spa-route/testing`, the router helpers for Vitest on happy-dom: `resetRouter()`, `navigate()`, `popstate()`, `installViewTransition()` and `trackUnhandledRejections()`", + "type": "minor" + } + ], + "packageName": "@excom/spa-route" +} diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index bbb8c5a..d147eb6 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -22,6 +22,9 @@ importers: '@excom/heft-rig': specifier: workspace:^ version: link:../heft-rig + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test ../../packages/content-carousel: dependencies: @@ -35,6 +38,9 @@ importers: '@excom/heft-rig': specifier: workspace:^ version: link:../heft-rig + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test ../../packages/content-drawer: dependencies: @@ -51,6 +57,9 @@ importers: '@excom/heft-rig': specifier: workspace:^ version: link:../heft-rig + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test ../../packages/content-tabs: dependencies: @@ -64,6 +73,9 @@ importers: '@excom/heft-rig': specifier: workspace:^ version: link:../heft-rig + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test ../../packages/data-table: dependencies: @@ -80,6 +92,9 @@ importers: '@excom/heft-rig': specifier: workspace:^ version: link:../heft-rig + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test ../../packages/detect-browser: dependencies: @@ -90,6 +105,9 @@ importers: '@excom/heft-rig': specifier: workspace:^ version: link:../heft-rig + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test ../../packages/detect-features: dependencies: @@ -100,6 +118,9 @@ importers: '@excom/heft-rig': specifier: workspace:^ version: link:../heft-rig + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test ../../packages/detect-media: dependencies: @@ -113,6 +134,9 @@ importers: '@excom/include-content': specifier: workspace:^ version: link:../include-content + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test '@excom/quark': specifier: workspace:^ version: link:../quark @@ -135,6 +159,9 @@ importers: '@excom/heft-rig': specifier: workspace:^ version: link:../heft-rig + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test ../../packages/dismiss-watcher: dependencies: @@ -157,6 +184,9 @@ importers: '@excom/heft-rig': specifier: workspace:^ version: link:../heft-rig + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test '@excom/quark': specifier: workspace:^ version: link:../quark @@ -314,6 +344,12 @@ importers: '@excom/heft-rig': specifier: workspace:^ version: link:../heft-rig + '@excom/nucleus-dom': + specifier: workspace:^ + version: link:../nucleus-dom + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test '@excom/quark-formatter': specifier: workspace:^ version: link:../quark-formatter @@ -330,6 +366,9 @@ importers: '@excom/heft-rig': specifier: workspace:^ version: link:../heft-rig + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test ../../packages/event-handler: dependencies: @@ -346,6 +385,9 @@ importers: '@excom/heft-rig': specifier: workspace:^ version: link:../heft-rig + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test ../../packages/fetchable-element: dependencies: @@ -368,6 +410,9 @@ importers: '@excom/heft-rig': specifier: workspace:^ version: link:../heft-rig + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test ../../packages/gesture-handler: dependencies: @@ -390,6 +435,9 @@ importers: '@excom/heft-rig': specifier: workspace:^ version: link:../heft-rig + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test '@excom/quark': specifier: workspace:^ version: link:../quark @@ -402,15 +450,15 @@ importers: '@excom/heft-rig': specifier: workspace:^ version: link:../heft-rig + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test ../../packages/heft-rig: dependencies: '@microsoft/api-extractor': specifier: ^7.55.5 version: 7.55.5(@types/node@20.19.27) - '@open-wc/semantic-dom-diff': - specifier: ^0.20.1 - version: 0.20.1 '@rushstack/heft': specifier: ^1.1.7 version: 1.1.7(@types/node@20.19.27) @@ -505,6 +553,9 @@ importers: '@excom/heft-rig': specifier: workspace:^ version: link:../heft-rig + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test ../../packages/kit-devtools: dependencies: @@ -518,12 +569,18 @@ importers: '@excom/heft-rig': specifier: workspace:^ version: link:../heft-rig + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test ../../packages/kit-logger: devDependencies: '@excom/heft-rig': specifier: workspace:^ version: link:../heft-rig + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test ../../packages/kit-router: dependencies: @@ -537,18 +594,27 @@ importers: '@excom/heft-rig': specifier: workspace:^ version: link:../heft-rig + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test ../../packages/kit-scroller: devDependencies: '@excom/heft-rig': specifier: workspace:^ version: link:../heft-rig + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test ../../packages/kit-shims: devDependencies: '@excom/heft-rig': specifier: workspace:^ version: link:../heft-rig + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test ../../packages/kit-utils: dependencies: @@ -559,6 +625,9 @@ importers: '@excom/heft-rig': specifier: workspace:^ version: link:../heft-rig + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test ../../packages/listenable-element: dependencies: @@ -575,6 +644,9 @@ importers: '@excom/heft-rig': specifier: workspace:^ version: link:../heft-rig + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test ../../packages/loadable-element: dependencies: @@ -585,6 +657,9 @@ importers: '@excom/heft-rig': specifier: workspace:^ version: link:../heft-rig + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test ../../packages/mapbox-view: dependencies: @@ -601,6 +676,9 @@ importers: '@excom/heft-rig': specifier: workspace:^ version: link:../heft-rig + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test ../../packages/network-status: dependencies: @@ -611,6 +689,9 @@ importers: '@excom/heft-rig': specifier: workspace:^ version: link:../heft-rig + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test ../../packages/neutron: dependencies: @@ -627,6 +708,9 @@ importers: '@excom/heft-rig': specifier: workspace:^ version: link:../heft-rig + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test ../../packages/nucleus-devtools: dependencies: @@ -652,6 +736,9 @@ importers: '@excom/heft-rig': specifier: workspace:^ version: link:../heft-rig + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test typescript: specifier: ^5.9.2 version: 5.9.3 @@ -659,6 +746,16 @@ importers: specifier: ^0.20.5 version: 0.20.27(@types/node@20.19.27)(eslint@9.39.2(jiti@2.7.0))(jiti@2.7.0)(rolldown@1.2.8) + ../../packages/nucleus-dom: + dependencies: + happy-dom: + specifier: 20.8.3 + version: 20.8.3 + devDependencies: + '@excom/heft-rig': + specifier: workspace:^ + version: link:../heft-rig + ../../packages/nucleus-kit: dependencies: '@excom/content-carousel': @@ -752,6 +849,9 @@ importers: '@excom/heft-rig': specifier: workspace:^ version: link:../heft-rig + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test ../../packages/nucleus-quark-highlighter: devDependencies: @@ -768,6 +868,22 @@ importers: specifier: ^0.28.2 version: 0.28.2 + ../../packages/nucleus-test: + dependencies: + '@excom/nucleus-dom': + specifier: workspace:^ + version: link:../nucleus-dom + '@open-wc/semantic-dom-diff': + specifier: ^0.20.1 + version: 0.20.1 + devDependencies: + '@excom/heft-rig': + specifier: workspace:^ + version: link:../heft-rig + vitest: + specifier: ^4.1.11 + version: 4.1.11(@types/node@20.19.27)(@vitest/coverage-v8@4.1.11)(happy-dom@20.8.3)(vite@8.3.0(@types/node@20.19.27)(esbuild@0.28.2)(jiti@2.7.0)) + ../../packages/provider-fetch: dependencies: '@excom/fetchable-element': @@ -783,6 +899,9 @@ importers: '@excom/kit-logger': specifier: workspace:^ version: link:../kit-logger + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test ../../packages/provider-geolocation: dependencies: @@ -793,6 +912,9 @@ importers: '@excom/heft-rig': specifier: workspace:^ version: link:../heft-rig + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test ../../packages/provider-orientation: dependencies: @@ -803,6 +925,9 @@ importers: '@excom/heft-rig': specifier: workspace:^ version: link:../heft-rig + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test ../../packages/provider-storage: dependencies: @@ -816,6 +941,9 @@ importers: '@excom/heft-rig': specifier: workspace:^ version: link:../heft-rig + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test ../../packages/quark: dependencies: @@ -838,6 +966,9 @@ importers: '@excom/heft-rig': specifier: workspace:^ version: link:../heft-rig + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test '@excom/provider-fetch': specifier: workspace:^ version: link:../provider-fetch @@ -850,6 +981,9 @@ importers: '@excom/heft-rig': specifier: workspace:^ version: link:../heft-rig + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test '@excom/quark-parser': specifier: workspace:^ version: link:../quark-parser @@ -859,6 +993,9 @@ importers: '@excom/heft-rig': specifier: workspace:^ version: link:../heft-rig + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test ../../packages/quark-sheet: dependencies: @@ -881,6 +1018,9 @@ importers: '@excom/heft-rig': specifier: workspace:^ version: link:../heft-rig + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test ../../packages/renderable-element: dependencies: @@ -903,6 +1043,9 @@ importers: '@excom/heft-rig': specifier: workspace:^ version: link:../heft-rig + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test ../../packages/routable-element: dependencies: @@ -916,6 +1059,9 @@ importers: '@excom/heft-rig': specifier: workspace:^ version: link:../heft-rig + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test ../../packages/scroll-into-view: dependencies: @@ -935,6 +1081,9 @@ importers: '@excom/heft-rig': specifier: workspace:^ version: link:../heft-rig + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test ../../packages/service-worker: dependencies: @@ -948,6 +1097,9 @@ importers: '@excom/kit-utils': specifier: workspace:^ version: link:../kit-utils + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test ../../packages/spa-route: dependencies: @@ -976,6 +1128,9 @@ importers: '@excom/heft-rig': specifier: workspace:^ version: link:../heft-rig + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test ../../packages/super-form: dependencies: @@ -992,6 +1147,9 @@ importers: '@excom/kit-logger': specifier: workspace:^ version: link:../kit-logger + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test '@excom/quark': specifier: workspace:^ version: link:../quark @@ -1008,6 +1166,9 @@ importers: '@excom/heft-rig': specifier: workspace:^ version: link:../heft-rig + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test ../../packages/super-input: dependencies: @@ -1024,6 +1185,9 @@ importers: '@excom/heft-rig': specifier: workspace:^ version: link:../heft-rig + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test ../../packages/valence: devDependencies: @@ -1046,6 +1210,24 @@ importers: '@excom/heft-rig': specifier: workspace:^ version: link:../heft-rig + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test + + ../../packages/wrenfield: + devDependencies: + '@excom/heft-rig': + specifier: workspace:^ + version: link:../heft-rig + '@excom/nucleus-kit': + specifier: workspace:^ + version: link:../nucleus-kit + '@excom/nucleus-test': + specifier: workspace:^ + version: link:../nucleus-test + '@excom/spa-route': + specifier: workspace:^ + version: link:../spa-route packages: @@ -6691,7 +6873,7 @@ snapshots: istanbul-reports: 3.2.0 log-update: 4.0.0 nanocolors: 0.2.13 - nanoid: 3.3.11 + nanoid: 3.3.19 open: 8.4.2 picomatch: 2.3.1 source-map: 0.7.6 diff --git a/packages/abortable-element/package.json b/packages/abortable-element/package.json index 92093e7..faeb978 100644 --- a/packages/abortable-element/package.json +++ b/packages/abortable-element/package.json @@ -26,7 +26,8 @@ }, "peerDependencies": {}, "devDependencies": { - "@excom/heft-rig": "workspace:^" + "@excom/heft-rig": "workspace:^", + "@excom/nucleus-test": "workspace:^" }, "repository": { "url": "excom-dev/nucleus", @@ -44,4 +45,4 @@ "excom": { "packageType": "element-base" } -} +} \ No newline at end of file diff --git a/packages/abortable-element/support/tests/abortable-element.test.ts b/packages/abortable-element/support/tests/abortable-element.test.ts index 3f14fef..17bb466 100644 --- a/packages/abortable-element/support/tests/abortable-element.test.ts +++ b/packages/abortable-element/support/tests/abortable-element.test.ts @@ -5,7 +5,7 @@ import { expect, fixture, it, -} from "@excom/heft-rig/profiles/default/config/test-utils"; +} from "@excom/nucleus-test"; const TAG = "abortable-element-test"; if (!customElements.get(TAG)) { diff --git a/packages/content-carousel/package.json b/packages/content-carousel/package.json index 177f38a..a7a283e 100644 --- a/packages/content-carousel/package.json +++ b/packages/content-carousel/package.json @@ -27,7 +27,8 @@ }, "peerDependencies": {}, "devDependencies": { - "@excom/heft-rig": "workspace:^" + "@excom/heft-rig": "workspace:^", + "@excom/nucleus-test": "workspace:^" }, "repository": { "url": "excom-dev/nucleus", @@ -43,4 +44,4 @@ "excom": { "packageType": "kit-element" } -} +} \ No newline at end of file diff --git a/packages/content-carousel/support/tests/content-carousel.test.ts b/packages/content-carousel/support/tests/content-carousel.test.ts index f57b8c0..25a33cf 100644 --- a/packages/content-carousel/support/tests/content-carousel.test.ts +++ b/packages/content-carousel/support/tests/content-carousel.test.ts @@ -6,7 +6,7 @@ import { it, vi, wait, -} from "@excom/heft-rig/profiles/default/config/test-utils"; +} from "@excom/nucleus-test"; import "../../index"; import { invokeCommand } from "@excom/neutron"; diff --git a/packages/content-carousel/support/tests/fade.view.test.ts b/packages/content-carousel/support/tests/fade.view.test.ts index 5f10297..000f4dd 100644 --- a/packages/content-carousel/support/tests/fade.view.test.ts +++ b/packages/content-carousel/support/tests/fade.view.test.ts @@ -4,8 +4,9 @@ import { describe, expect, it, -} from "@excom/heft-rig/profiles/default/config/test-utils"; -import { mountView, readDemo } from "@excom/quark/support/tests/view-helpers"; + readDemo, +} from "@excom/nucleus-test"; +import { mountView } from "@excom/quark/support/tests/view-helpers"; describe("fade view", () => { afterEach(() => { diff --git a/packages/content-carousel/support/tests/manual.view.test.ts b/packages/content-carousel/support/tests/manual.view.test.ts index b7a5b96..814f67a 100644 --- a/packages/content-carousel/support/tests/manual.view.test.ts +++ b/packages/content-carousel/support/tests/manual.view.test.ts @@ -5,12 +5,12 @@ import { describe, expect, it, -} from "@excom/heft-rig/profiles/default/config/test-utils"; + readDemo, +} from "@excom/nucleus-test"; import { click, flush, mountView, - readDemo, } from "@excom/quark/support/tests/view-helpers"; describe("manual view", () => { diff --git a/packages/content-carousel/support/tests/simple.view.test.ts b/packages/content-carousel/support/tests/simple.view.test.ts index 74deb65..76f25db 100644 --- a/packages/content-carousel/support/tests/simple.view.test.ts +++ b/packages/content-carousel/support/tests/simple.view.test.ts @@ -4,9 +4,10 @@ import { describe, expect, it, + readDemo, wait, -} from "@excom/heft-rig/profiles/default/config/test-utils"; -import { mountView, readDemo } from "@excom/quark/support/tests/view-helpers"; +} from "@excom/nucleus-test"; +import { mountView } from "@excom/quark/support/tests/view-helpers"; describe("simple view", () => { afterEach(() => { diff --git a/packages/content-drawer/package.json b/packages/content-drawer/package.json index dac2fbe..3202848 100644 --- a/packages/content-drawer/package.json +++ b/packages/content-drawer/package.json @@ -28,7 +28,8 @@ }, "peerDependencies": {}, "devDependencies": { - "@excom/heft-rig": "workspace:^" + "@excom/heft-rig": "workspace:^", + "@excom/nucleus-test": "workspace:^" }, "repository": { "url": "excom-dev/nucleus", @@ -44,4 +45,4 @@ "excom": { "packageType": "kit-element" } -} +} \ No newline at end of file diff --git a/packages/content-drawer/support/tests/content-drawer.test.ts b/packages/content-drawer/support/tests/content-drawer.test.ts index 54b2f8a..efdafda 100644 --- a/packages/content-drawer/support/tests/content-drawer.test.ts +++ b/packages/content-drawer/support/tests/content-drawer.test.ts @@ -6,7 +6,7 @@ import { it, vi, wait, -} from "@excom/heft-rig/profiles/default/config/test-utils"; +} from "@excom/nucleus-test"; import "../../index"; import { propsFromSource } from "../../content-drawer"; import { invokeCommand } from "@excom/neutron"; diff --git a/packages/content-drawer/support/tests/disappear.view.test.ts b/packages/content-drawer/support/tests/disappear.view.test.ts index 33b3985..57f1fe0 100644 --- a/packages/content-drawer/support/tests/disappear.view.test.ts +++ b/packages/content-drawer/support/tests/disappear.view.test.ts @@ -5,13 +5,13 @@ import { describe, expect, it, + readDemo, wait, -} from "@excom/heft-rig/profiles/default/config/test-utils"; +} from "@excom/nucleus-test"; import { click, flush, mountView, - readDemo, } from "@excom/quark/support/tests/view-helpers"; describe("disappear view", () => { diff --git a/packages/content-drawer/support/tests/dismiss.view.test.ts b/packages/content-drawer/support/tests/dismiss.view.test.ts index 1c3aed1..dd3a66a 100644 --- a/packages/content-drawer/support/tests/dismiss.view.test.ts +++ b/packages/content-drawer/support/tests/dismiss.view.test.ts @@ -7,12 +7,12 @@ import { describe, expect, it, -} from "@excom/heft-rig/profiles/default/config/test-utils"; + readDemo, +} from "@excom/nucleus-test"; import { click, flush, mountView, - readDemo, } from "@excom/quark/support/tests/view-helpers"; const outsideMouseup = (target: EventTarget) => diff --git a/packages/content-drawer/support/tests/from-side.view.test.ts b/packages/content-drawer/support/tests/from-side.view.test.ts index 626d83b..bb5c3e1 100644 --- a/packages/content-drawer/support/tests/from-side.view.test.ts +++ b/packages/content-drawer/support/tests/from-side.view.test.ts @@ -5,12 +5,12 @@ import { describe, expect, it, -} from "@excom/heft-rig/profiles/default/config/test-utils"; + readDemo, +} from "@excom/nucleus-test"; import { click, flush, mountView, - readDemo, } from "@excom/quark/support/tests/view-helpers"; describe("from-side view", () => { diff --git a/packages/content-drawer/support/tests/simple.view.test.ts b/packages/content-drawer/support/tests/simple.view.test.ts index ea72778..a838833 100644 --- a/packages/content-drawer/support/tests/simple.view.test.ts +++ b/packages/content-drawer/support/tests/simple.view.test.ts @@ -5,12 +5,12 @@ import { describe, expect, it, -} from "@excom/heft-rig/profiles/default/config/test-utils"; + readDemo, +} from "@excom/nucleus-test"; import { click, flush, mountView, - readDemo, } from "@excom/quark/support/tests/view-helpers"; describe("simple view", () => { diff --git a/packages/content-drawer/support/tests/singleton.view.test.ts b/packages/content-drawer/support/tests/singleton.view.test.ts index d1b1cde..b4256a8 100644 --- a/packages/content-drawer/support/tests/singleton.view.test.ts +++ b/packages/content-drawer/support/tests/singleton.view.test.ts @@ -5,12 +5,12 @@ import { describe, expect, it, -} from "@excom/heft-rig/profiles/default/config/test-utils"; + readDemo, +} from "@excom/nucleus-test"; import { click, flush, mountView, - readDemo, } from "@excom/quark/support/tests/view-helpers"; describe("singleton view", () => { diff --git a/packages/content-drawer/support/tests/stages.view.test.ts b/packages/content-drawer/support/tests/stages.view.test.ts index e08305f..a83cacd 100644 --- a/packages/content-drawer/support/tests/stages.view.test.ts +++ b/packages/content-drawer/support/tests/stages.view.test.ts @@ -5,12 +5,12 @@ import { describe, expect, it, -} from "@excom/heft-rig/profiles/default/config/test-utils"; + readDemo, +} from "@excom/nucleus-test"; import { click, flush, mountView, - readDemo, } from "@excom/quark/support/tests/view-helpers"; describe("stages view", () => { diff --git a/packages/content-tabs/package.json b/packages/content-tabs/package.json index dde60ea..c8ae391 100644 --- a/packages/content-tabs/package.json +++ b/packages/content-tabs/package.json @@ -27,7 +27,8 @@ }, "peerDependencies": {}, "devDependencies": { - "@excom/heft-rig": "workspace:^" + "@excom/heft-rig": "workspace:^", + "@excom/nucleus-test": "workspace:^" }, "repository": { "url": "excom-dev/nucleus", @@ -43,4 +44,4 @@ "excom": { "packageType": "kit-element" } -} +} \ No newline at end of file diff --git a/packages/content-tabs/support/tests/content-tabs.test.ts b/packages/content-tabs/support/tests/content-tabs.test.ts index be1b246..c9fccdc 100644 --- a/packages/content-tabs/support/tests/content-tabs.test.ts +++ b/packages/content-tabs/support/tests/content-tabs.test.ts @@ -6,7 +6,7 @@ import { it, vi, wait, -} from "@excom/heft-rig/profiles/default/config/test-utils"; +} from "@excom/nucleus-test"; import "../../index"; /* diff --git a/packages/content-tabs/support/tests/file-tabs.view.test.ts b/packages/content-tabs/support/tests/file-tabs.view.test.ts index 30bc924..e6283e8 100644 --- a/packages/content-tabs/support/tests/file-tabs.view.test.ts +++ b/packages/content-tabs/support/tests/file-tabs.view.test.ts @@ -4,9 +4,10 @@ import { describe, expect, it, + readDemo, wait, -} from "@excom/heft-rig/profiles/default/config/test-utils"; -import { mountView, readDemo } from "@excom/quark/support/tests/view-helpers"; +} from "@excom/nucleus-test"; +import { mountView } from "@excom/quark/support/tests/view-helpers"; describe("file-tabs view", () => { afterEach(() => { diff --git a/packages/content-tabs/support/tests/multi.view.test.ts b/packages/content-tabs/support/tests/multi.view.test.ts index 85c0880..0438d6c 100644 --- a/packages/content-tabs/support/tests/multi.view.test.ts +++ b/packages/content-tabs/support/tests/multi.view.test.ts @@ -4,9 +4,10 @@ import { describe, expect, it, + readDemo, wait, -} from "@excom/heft-rig/profiles/default/config/test-utils"; -import { mountView, readDemo } from "@excom/quark/support/tests/view-helpers"; +} from "@excom/nucleus-test"; +import { mountView } from "@excom/quark/support/tests/view-helpers"; describe("multi view", () => { afterEach(() => { diff --git a/packages/content-tabs/support/tests/named.view.test.ts b/packages/content-tabs/support/tests/named.view.test.ts index 99774c1..c560f1a 100644 --- a/packages/content-tabs/support/tests/named.view.test.ts +++ b/packages/content-tabs/support/tests/named.view.test.ts @@ -4,9 +4,10 @@ import { describe, expect, it, + readDemo, wait, -} from "@excom/heft-rig/profiles/default/config/test-utils"; -import { mountView, readDemo } from "@excom/quark/support/tests/view-helpers"; +} from "@excom/nucleus-test"; +import { mountView } from "@excom/quark/support/tests/view-helpers"; describe("named view", () => { afterEach(() => { diff --git a/packages/content-tabs/support/tests/simple.view.test.ts b/packages/content-tabs/support/tests/simple.view.test.ts index 9bb1eb3..4de6d96 100644 --- a/packages/content-tabs/support/tests/simple.view.test.ts +++ b/packages/content-tabs/support/tests/simple.view.test.ts @@ -4,9 +4,10 @@ import { describe, expect, it, + readDemo, wait, -} from "@excom/heft-rig/profiles/default/config/test-utils"; -import { mountView, readDemo } from "@excom/quark/support/tests/view-helpers"; +} from "@excom/nucleus-test"; +import { mountView } from "@excom/quark/support/tests/view-helpers"; describe("simple view", () => { afterEach(() => { diff --git a/packages/data-table/package.json b/packages/data-table/package.json index d396cfa..b3e0338 100644 --- a/packages/data-table/package.json +++ b/packages/data-table/package.json @@ -28,7 +28,8 @@ }, "peerDependencies": {}, "devDependencies": { - "@excom/heft-rig": "workspace:^" + "@excom/heft-rig": "workspace:^", + "@excom/nucleus-test": "workspace:^" }, "repository": { "url": "excom-dev/nucleus", @@ -44,4 +45,4 @@ "excom": { "packageType": "kit-element" } -} +} \ No newline at end of file diff --git a/packages/data-table/support/tests/data-table.test.ts b/packages/data-table/support/tests/data-table.test.ts index dce1eba..cc7383d 100644 --- a/packages/data-table/support/tests/data-table.test.ts +++ b/packages/data-table/support/tests/data-table.test.ts @@ -7,7 +7,7 @@ import { vi, wait, waitForEvent, -} from "@excom/heft-rig/profiles/default/config/test-utils"; +} from "@excom/nucleus-test"; import "../../index"; import type { DataTableSortDetail } from "../../data-table"; import { invokeCommand } from "@excom/neutron"; diff --git a/packages/data-table/support/tests/filter.view.test.ts b/packages/data-table/support/tests/filter.view.test.ts index 072ffda..0984138 100644 --- a/packages/data-table/support/tests/filter.view.test.ts +++ b/packages/data-table/support/tests/filter.view.test.ts @@ -5,8 +5,9 @@ import { describe, expect, it, -} from "@excom/heft-rig/profiles/default/config/test-utils"; -import { flush, mountView, readDemo } from "@excom/quark/support/tests/view-helpers"; + readDemo, +} from "@excom/nucleus-test"; +import { flush, mountView } from "@excom/quark/support/tests/view-helpers"; const isFilteredOut = (tr: HTMLElement) => tr.style.getPropertyValue("--data-tr-display") === "none"; diff --git a/packages/data-table/support/tests/simple.view.test.ts b/packages/data-table/support/tests/simple.view.test.ts index ff04d8c..30475d7 100644 --- a/packages/data-table/support/tests/simple.view.test.ts +++ b/packages/data-table/support/tests/simple.view.test.ts @@ -4,9 +4,10 @@ import { describe, expect, it, + readDemo, wait, -} from "@excom/heft-rig/profiles/default/config/test-utils"; -import { click, flush, mountView, readDemo } from "@excom/quark/support/tests/view-helpers"; +} from "@excom/nucleus-test"; +import { click, flush, mountView } from "@excom/quark/support/tests/view-helpers"; const rowOrder = (tr: HTMLElement) => parseInt(tr.style.getPropertyValue("--data-tr-order") || "0", 10); diff --git a/packages/detect-browser/package.json b/packages/detect-browser/package.json index ed57a44..d283c7b 100644 --- a/packages/detect-browser/package.json +++ b/packages/detect-browser/package.json @@ -26,7 +26,8 @@ }, "peerDependencies": {}, "devDependencies": { - "@excom/heft-rig": "workspace:^" + "@excom/heft-rig": "workspace:^", + "@excom/nucleus-test": "workspace:^" }, "repository": { "url": "excom-dev/nucleus", @@ -42,4 +43,4 @@ "excom": { "packageType": "kit-element" } -} +} \ No newline at end of file diff --git a/packages/detect-browser/support/tests/detect-browser.test.ts b/packages/detect-browser/support/tests/detect-browser.test.ts index 65acd5b..d7ce8ae 100644 --- a/packages/detect-browser/support/tests/detect-browser.test.ts +++ b/packages/detect-browser/support/tests/detect-browser.test.ts @@ -6,7 +6,7 @@ import { it, vi, wait, -} from "@excom/heft-rig/profiles/default/config/test-utils"; +} from "@excom/nucleus-test"; import "../../index"; const UA = { diff --git a/packages/detect-browser/support/tests/language.view.test.ts b/packages/detect-browser/support/tests/language.view.test.ts index 44d2313..8dc4ec3 100644 --- a/packages/detect-browser/support/tests/language.view.test.ts +++ b/packages/detect-browser/support/tests/language.view.test.ts @@ -4,8 +4,9 @@ import { describe, expect, it, -} from "@excom/heft-rig/profiles/default/config/test-utils"; -import { mountView, readDemo } from "@excom/quark/support/tests/view-helpers"; + readDemo, +} from "@excom/nucleus-test"; +import { mountView } from "@excom/quark/support/tests/view-helpers"; describe("language view", () => { afterEach(() => { diff --git a/packages/detect-browser/support/tests/safari.view.test.ts b/packages/detect-browser/support/tests/safari.view.test.ts index c2ac8d4..e21d693 100644 --- a/packages/detect-browser/support/tests/safari.view.test.ts +++ b/packages/detect-browser/support/tests/safari.view.test.ts @@ -6,9 +6,10 @@ import { describe, expect, it, + readDemo, vi, -} from "@excom/heft-rig/profiles/default/config/test-utils"; -import { mountView, readDemo } from "@excom/quark/support/tests/view-helpers"; +} from "@excom/nucleus-test"; +import { mountView } from "@excom/quark/support/tests/view-helpers"; const IOS_SAFARI = "Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1"; diff --git a/packages/detect-browser/support/tests/simple.view.test.ts b/packages/detect-browser/support/tests/simple.view.test.ts index 1fe7d95..9912f66 100644 --- a/packages/detect-browser/support/tests/simple.view.test.ts +++ b/packages/detect-browser/support/tests/simple.view.test.ts @@ -4,8 +4,9 @@ import { describe, expect, it, -} from "@excom/heft-rig/profiles/default/config/test-utils"; -import { mountView, readDemo } from "@excom/quark/support/tests/view-helpers"; + readDemo, +} from "@excom/nucleus-test"; +import { mountView } from "@excom/quark/support/tests/view-helpers"; describe("simple view", () => { afterEach(() => { diff --git a/packages/detect-features/package.json b/packages/detect-features/package.json index b987dba..5666510 100644 --- a/packages/detect-features/package.json +++ b/packages/detect-features/package.json @@ -26,7 +26,8 @@ }, "peerDependencies": {}, "devDependencies": { - "@excom/heft-rig": "workspace:^" + "@excom/heft-rig": "workspace:^", + "@excom/nucleus-test": "workspace:^" }, "repository": { "url": "excom-dev/nucleus", @@ -42,4 +43,4 @@ "excom": { "packageType": "kit-element" } -} +} \ No newline at end of file diff --git a/packages/detect-features/support/tests/detect-features.test.ts b/packages/detect-features/support/tests/detect-features.test.ts index 7280e1c..5209055 100644 --- a/packages/detect-features/support/tests/detect-features.test.ts +++ b/packages/detect-features/support/tests/detect-features.test.ts @@ -5,7 +5,7 @@ import { expect, it, } from "@excom/heft-rig/node_modules/vitest"; -import { fixture } from "@excom/heft-rig/profiles/default/config/test-utils"; +import { fixture } from "@excom/nucleus-test"; const FEATURES = [ "geolocation", diff --git a/packages/detect-features/support/tests/share.view.test.ts b/packages/detect-features/support/tests/share.view.test.ts index f25a8fc..7bcbe2b 100644 --- a/packages/detect-features/support/tests/share.view.test.ts +++ b/packages/detect-features/support/tests/share.view.test.ts @@ -4,8 +4,9 @@ import { describe, expect, it, -} from "@excom/heft-rig/profiles/default/config/test-utils"; -import { mountView, readDemo } from "@excom/quark/support/tests/view-helpers"; + readDemo, +} from "@excom/nucleus-test"; +import { mountView } from "@excom/quark/support/tests/view-helpers"; describe("share view", () => { afterEach(() => { diff --git a/packages/detect-features/support/tests/simple.view.test.ts b/packages/detect-features/support/tests/simple.view.test.ts index 0c43613..82fce7f 100644 --- a/packages/detect-features/support/tests/simple.view.test.ts +++ b/packages/detect-features/support/tests/simple.view.test.ts @@ -4,8 +4,9 @@ import { describe, expect, it, -} from "@excom/heft-rig/profiles/default/config/test-utils"; -import { mountView, readDemo } from "@excom/quark/support/tests/view-helpers"; + readDemo, +} from "@excom/nucleus-test"; +import { mountView } from "@excom/quark/support/tests/view-helpers"; describe("simple view", () => { afterEach(() => { diff --git a/packages/detect-media/package.json b/packages/detect-media/package.json index 5eb6c63..32e7ac1 100644 --- a/packages/detect-media/package.json +++ b/packages/detect-media/package.json @@ -28,6 +28,7 @@ "devDependencies": { "@excom/heft-rig": "workspace:^", "@excom/include-content": "workspace:^", + "@excom/nucleus-test": "workspace:^", "@excom/quark": "workspace:^", "@excom/quark-sheet": "workspace:^" }, @@ -45,4 +46,4 @@ "excom": { "packageType": "kit-element" } -} +} \ No newline at end of file diff --git a/packages/detect-media/support/tests/detect-media.test.ts b/packages/detect-media/support/tests/detect-media.test.ts index 6467cfe..6ea080c 100644 --- a/packages/detect-media/support/tests/detect-media.test.ts +++ b/packages/detect-media/support/tests/detect-media.test.ts @@ -6,7 +6,7 @@ import { it, vi, wait, -} from "@excom/heft-rig/profiles/default/config/test-utils"; +} from "@excom/nucleus-test"; import "../../index"; import { lastFake, resetFakes, stubMatchMedia } from "./fake-match-media"; diff --git a/packages/detect-media/support/tests/fake-match-media.ts b/packages/detect-media/support/tests/fake-match-media.ts index 43d5b1d..22bba50 100644 --- a/packages/detect-media/support/tests/fake-match-media.ts +++ b/packages/detect-media/support/tests/fake-match-media.ts @@ -1,4 +1,4 @@ -import { vi } from "@excom/heft-rig/profiles/default/config/test-utils"; +import { vi } from "@excom/nucleus-test"; export type FakeMediaQueryList = { media: string; diff --git a/packages/detect-media/support/tests/pointer.view.test.ts b/packages/detect-media/support/tests/pointer.view.test.ts index ec0fce4..fd77950 100644 --- a/packages/detect-media/support/tests/pointer.view.test.ts +++ b/packages/detect-media/support/tests/pointer.view.test.ts @@ -6,9 +6,10 @@ import { describe, expect, it, + readDemo, vi, -} from "@excom/heft-rig/profiles/default/config/test-utils"; -import { flush, mountView, readDemo } from "@excom/quark/support/tests/view-helpers"; +} from "@excom/nucleus-test"; +import { flush, mountView } from "@excom/quark/support/tests/view-helpers"; import { lastFake, resetFakes, stubMatchMedia } from "./fake-match-media"; const COARSE = "(pointer: coarse)"; diff --git a/packages/detect-media/support/tests/simple.view.test.ts b/packages/detect-media/support/tests/simple.view.test.ts index 11cba88..c2464a7 100644 --- a/packages/detect-media/support/tests/simple.view.test.ts +++ b/packages/detect-media/support/tests/simple.view.test.ts @@ -4,9 +4,10 @@ import { describe, expect, it, + readDemo, vi, -} from "@excom/heft-rig/profiles/default/config/test-utils"; -import { flush, mountView, readDemo } from "@excom/quark/support/tests/view-helpers"; +} from "@excom/nucleus-test"; +import { flush, mountView } from "@excom/quark/support/tests/view-helpers"; import { lastFake, resetFakes, stubMatchMedia } from "./fake-match-media"; const DARK = "(prefers-color-scheme: dark)"; diff --git a/packages/dialog-anchor/package.json b/packages/dialog-anchor/package.json index cc54d29..ee67666 100644 --- a/packages/dialog-anchor/package.json +++ b/packages/dialog-anchor/package.json @@ -28,7 +28,8 @@ }, "peerDependencies": {}, "devDependencies": { - "@excom/heft-rig": "workspace:^" + "@excom/heft-rig": "workspace:^", + "@excom/nucleus-test": "workspace:^" }, "repository": { "url": "excom-dev/nucleus", @@ -44,4 +45,4 @@ "excom": { "packageType": "kit-element" } -} +} \ No newline at end of file diff --git a/packages/dialog-anchor/support/tests/auto-close.view.test.ts b/packages/dialog-anchor/support/tests/auto-close.view.test.ts index d7a97eb..e277169 100644 --- a/packages/dialog-anchor/support/tests/auto-close.view.test.ts +++ b/packages/dialog-anchor/support/tests/auto-close.view.test.ts @@ -5,12 +5,12 @@ import { describe, expect, it, -} from "@excom/heft-rig/profiles/default/config/test-utils"; + readDemo, +} from "@excom/nucleus-test"; import { click, flush, mountView, - readDemo, } from "@excom/quark/support/tests/view-helpers"; describe("auto-close view", () => { diff --git a/packages/dialog-anchor/support/tests/dialog-anchor.test.ts b/packages/dialog-anchor/support/tests/dialog-anchor.test.ts index 8f17e37..6342695 100644 --- a/packages/dialog-anchor/support/tests/dialog-anchor.test.ts +++ b/packages/dialog-anchor/support/tests/dialog-anchor.test.ts @@ -5,7 +5,7 @@ import { fixture, it, vi, -} from "@excom/heft-rig/profiles/default/config/test-utils"; +} from "@excom/nucleus-test"; import "../../index"; describe("dialog-anchor", () => { diff --git a/packages/dialog-anchor/support/tests/is-modal.view.test.ts b/packages/dialog-anchor/support/tests/is-modal.view.test.ts index 21cd602..39a4f9e 100644 --- a/packages/dialog-anchor/support/tests/is-modal.view.test.ts +++ b/packages/dialog-anchor/support/tests/is-modal.view.test.ts @@ -4,12 +4,12 @@ import { describe, expect, it, -} from "@excom/heft-rig/profiles/default/config/test-utils"; + readDemo, +} from "@excom/nucleus-test"; import { click, flush, mountView, - readDemo, } from "@excom/quark/support/tests/view-helpers"; describe("is-modal view", () => { diff --git a/packages/dialog-anchor/support/tests/simple.view.test.ts b/packages/dialog-anchor/support/tests/simple.view.test.ts index 24af1c0..2b29c3b 100644 --- a/packages/dialog-anchor/support/tests/simple.view.test.ts +++ b/packages/dialog-anchor/support/tests/simple.view.test.ts @@ -4,12 +4,12 @@ import { describe, expect, it, -} from "@excom/heft-rig/profiles/default/config/test-utils"; + readDemo, +} from "@excom/nucleus-test"; import { click, flush, mountView, - readDemo, } from "@excom/quark/support/tests/view-helpers"; describe("simple view", () => { diff --git a/packages/dismiss-watcher/package.json b/packages/dismiss-watcher/package.json index 2cad47d..ee54ad2 100644 --- a/packages/dismiss-watcher/package.json +++ b/packages/dismiss-watcher/package.json @@ -31,6 +31,7 @@ "@excom/content-drawer": "workspace:^", "@excom/event-handler": "workspace:^", "@excom/heft-rig": "workspace:^", + "@excom/nucleus-test": "workspace:^", "@excom/quark": "workspace:^", "@excom/quark-sheet": "workspace:^" }, @@ -48,4 +49,4 @@ "excom": { "packageType": "kit-element" } -} +} \ No newline at end of file diff --git a/packages/dismiss-watcher/support/tests/dismiss-watcher.test.ts b/packages/dismiss-watcher/support/tests/dismiss-watcher.test.ts index 81e2b70..e67679f 100644 --- a/packages/dismiss-watcher/support/tests/dismiss-watcher.test.ts +++ b/packages/dismiss-watcher/support/tests/dismiss-watcher.test.ts @@ -6,7 +6,7 @@ import { it, vi, wait, -} from "@excom/heft-rig/profiles/default/config/test-utils"; +} from "@excom/nucleus-test"; import "../../index"; const outsideMouseup = (target: EventTarget = document.body) => diff --git a/packages/dismiss-watcher/support/tests/drawer.view.test.ts b/packages/dismiss-watcher/support/tests/drawer.view.test.ts index cd451fa..0a549eb 100644 --- a/packages/dismiss-watcher/support/tests/drawer.view.test.ts +++ b/packages/dismiss-watcher/support/tests/drawer.view.test.ts @@ -8,11 +8,11 @@ import { describe, expect, it, -} from "@excom/heft-rig/profiles/default/config/test-utils"; + readDemo, +} from "@excom/nucleus-test"; import { flush, mountView, - readDemo, } from "@excom/quark/support/tests/view-helpers"; const outsideMouseup = (target: EventTarget) => diff --git a/packages/dismiss-watcher/support/tests/simple.view.test.ts b/packages/dismiss-watcher/support/tests/simple.view.test.ts index 87ae538..12db0c5 100644 --- a/packages/dismiss-watcher/support/tests/simple.view.test.ts +++ b/packages/dismiss-watcher/support/tests/simple.view.test.ts @@ -6,12 +6,12 @@ import { describe, expect, it, -} from "@excom/heft-rig/profiles/default/config/test-utils"; + readDemo, +} from "@excom/nucleus-test"; import { click, flush, mountView, - readDemo, } from "@excom/quark/support/tests/view-helpers"; const outsideMouseup = (target: EventTarget) => diff --git a/packages/docs-site/index.html b/packages/docs-site/index.html index 5c38d22..9f26449 100644 --- a/packages/docs-site/index.html +++ b/packages/docs-site/index.html @@ -506,7 +506,7 @@
Packages
- + diff --git a/packages/docs-site/package.json b/packages/docs-site/package.json index 3a5bc8e..14c08ae 100644 --- a/packages/docs-site/package.json +++ b/packages/docs-site/package.json @@ -73,6 +73,8 @@ "peerDependencies": {}, "devDependencies": { "@excom/heft-rig": "workspace:^", + "@excom/nucleus-dom": "workspace:^", + "@excom/nucleus-test": "workspace:^", "@excom/quark-formatter": "workspace:^" }, "bugs": "https://github.com/excom-dev/nucleus/issues", @@ -84,4 +86,4 @@ "documented": false, "packageType": "site" } -} +} \ No newline at end of file diff --git a/packages/docs-site/public/views/package/package.css b/packages/docs-site/public/views/package/package.css index 6d6d3a6..3f7cc35 100644 --- a/packages/docs-site/public/views/package/package.css +++ b/packages/docs-site/public/views/package/package.css @@ -59,6 +59,10 @@ } } } + + .release-notes h3 { + font-size: 1rem; + } } /* Pre-load placeholder for lazy live demos: must apply before the @@ -367,6 +371,7 @@ include-content[data-demo] { counter-reset: start-here; > li { + list-style: none; counter-increment: start-here; margin: 0 0 0.55rem; padding: 0.85rem 1rem; diff --git a/packages/docs-site/support/docs/CONTRIBUTING.md b/packages/docs-site/support/docs/CONTRIBUTING.md index c4ec22c..95aaa96 100644 --- a/packages/docs-site/support/docs/CONTRIBUTING.md +++ b/packages/docs-site/support/docs/CONTRIBUTING.md @@ -125,7 +125,7 @@ Pick the bump honestly: | `patch` | A fix or internal improvement with the same public contract | | `none` | Docs, demos or tests only | -The comment is published documentation, so write it for an app author who has never seen the implementation. Ask what it means to them: does it break them, fix something that annoyed them, give them something new to try? +The comment is published documentation — every type but `none` appears in the package's release notes, on the site and in the LLM docs — so write it for an app author who has never seen the implementation. Ask what it means to them: does it break them, fix something that annoyed them, give them something new to try? - Imperative mood, starting with a verb — Add, Remove, Fix an issue where, Improve, Update, Upgrade, Initial release of. - The outcome ("Searching now supports wildcards"), not the diff ("Add regex support to `SearchHelper`"). diff --git a/packages/docs-site/support/docs/INTRODUCTION.md b/packages/docs-site/support/docs/INTRODUCTION.md index 5c4b408..7ee5db1 100644 --- a/packages/docs-site/support/docs/INTRODUCTION.md +++ b/packages/docs-site/support/docs/INTRODUCTION.md @@ -16,11 +16,11 @@ Your HTML __*is*__ the app! Drop-in custom elements that each have a single resp - **Little to no JavaScript** You no longer need to write JS for the vast majority of UI cases. You may still call-out to your own pure functions for complex cases. - **Native++** It's real HTML. With a separate, synergistic guest: Quark. - **No magic** No special frameworks, build processes, rendering wizardry, or "HTML-in-my-JS" / "JS-in-my-HTML" DSLs. -- **Progressively enhanced** Drop into existing static/server-side-rendered sites. Neutron and Quark can also be used independently. +- **Progressively enhanced** Drop into existing static/server-side-rendered sites. Nucleus elements and Quark can also be used independently. - **Fully composable** Templates, templating, behavior, and custom logic are all decoupled & robust. - **Reactive State Machine** A simple, reliable, declarative syntax for your business logic - Quark. - **No reconciliation tax** No large memory copies of state/DOM to be rebuilt, diffed against the DOM, recompiled with every state change. -- **Lightweight** All Nucleus Kit elements + Quark + Neutron have a smaller footprint (just over ~50kb compressed) than some UI framework cores alone. +- **Lightweight** All Nucleus elements + Quark + Neutron have a smaller footprint (just over ~50kb compressed) than some UI framework cores alone. ## What's in the stack @@ -45,7 +45,13 @@ Every piece stands alone. Use one element on an existing site, or compose the wh Content-rich sites, complex data-driven business rules, progressive enhancement of static/server-rendered pages, embedded user experiences. See [Limitations](/nucleus/docs/limitations) for the edges. -The Nucleus Stack also opens up new possibilities that were not easily served by any UI technology before: zero-build-tool UIs (e.g. on-the-fly generation), declarative & auditable target for LLM UI building, plain text assembly to rich UX (like a CMS), incremental upgrading of static/legacy SSR sites, resource-constrained web UIs (especially where scripting needs to be validated or limited, like an ATM), embedded UX (such as upgrading markdown with embedded functionality). +The Nucleus Stack also opens up new possibilities that were not easily served by any UI technology before: +- zero-build-tool UIs (e.g. on-the-fly generation) +- declarative & auditable target for LLM UI building +- programmatic assembly of rich UX (like a CMS) +- incremental upgrading of static/legacy SSR sites +- resource-constrained, secure, or sandboxed web UIs (especially where scripting needs to be validated or limited, like an ATM) +- embedded UX (such as upgrading markdown with embedded functionality) ## Dogfood is nutritious diff --git a/packages/docs-site/support/docs/ROADMAP.md b/packages/docs-site/support/docs/ROADMAP.md index 64e84cf..d9dedce 100644 --- a/packages/docs-site/support/docs/ROADMAP.md +++ b/packages/docs-site/support/docs/ROADMAP.md @@ -20,8 +20,8 @@ Until then: **pin your versions**, and read the change notes before you upgrade. Work that is done or nearly done, landing in the next releases. -- **SSR** Will involve reusing happy-dom test setup for SSR. -- **Releasing the testing library** It currently exists internally, as happy-dom plus modifications. It will be packaged up and released publicly. +- **SSR** `@excom/nucleus-dom` supplies the per-request DOM (happy-dom with browser-parity shims); the render path on top of it is next. +- **The testing packages** `@excom/nucleus-dom` and `@excom/nucleus-test` (Vitest setup, matchers, helpers), extracted from the internal rig, land in the next release. - **More elements in the catalog.** May include some of the following elements. Interaction: `content-sortable`, `content-splitter`, `content-popover`, `super-file-input`. Actions: `clipboard-copy`, `web-share`, `file-download`. Sensors: `detect-visibility`, `detect-size`, `detect-scroll`, `detect-document`, `detect-permission`. Providers: `provider-url-params`, `provider-event-source`, `provider-websocket`, `provider-worker`. - **Polyfills** Some features will be broken for certain browsers whose versions are older than a year (mainly Firefox & Safari, mid-2025). This will be remedied in the first stable release. - **The small-bug backlog.** A coverage sweep across every package surfaced a list of minor defects. They are being triaged and fixed ahead of a stable release. diff --git a/packages/docs-site/support/tests/cells-app.test.ts b/packages/docs-site/support/tests/cells-app.test.ts index 45b3c58..7f1da53 100644 --- a/packages/docs-site/support/tests/cells-app.test.ts +++ b/packages/docs-site/support/tests/cells-app.test.ts @@ -3,7 +3,7 @@ import { describe, expect, it, -} from "@excom/heft-rig/profiles/default/config/test-utils"; +} from "@excom/nucleus-test"; import { commit, evalCell, range } from "../../public/views/cells-app/cells-app"; /** A tiny grid: one `` per ref. */ diff --git a/packages/docs-site/support/tests/cells-app.view.test.ts b/packages/docs-site/support/tests/cells-app.view.test.ts index 9503820..a90e5cf 100644 --- a/packages/docs-site/support/tests/cells-app.view.test.ts +++ b/packages/docs-site/support/tests/cells-app.view.test.ts @@ -13,7 +13,7 @@ import { it, vi, waitForEvent, -} from "@excom/heft-rig/profiles/default/config/test-utils"; +} from "@excom/nucleus-test"; import { readFileSync } from "node:fs"; import { dirname, resolve } from "node:path"; import { fileURLToPath } from "node:url"; diff --git a/packages/docs-site/support/tests/company.view.test.ts b/packages/docs-site/support/tests/company.view.test.ts index 2eb0c8e..646aca9 100644 --- a/packages/docs-site/support/tests/company.view.test.ts +++ b/packages/docs-site/support/tests/company.view.test.ts @@ -6,16 +6,16 @@ import { expect, fixture, it, + readFileRelative, spyFetch, vi, waitForEvent, -} from "@excom/heft-rig/profiles/default/config/test-utils"; +} from "@excom/nucleus-test"; import { flush, - readViewFile, } from "@excom/quark/support/tests/view-helpers"; -const html = readViewFile( +const html = readFileRelative( import.meta.url, "../../public/views/company/company.html", ); diff --git a/packages/docs-site/support/tests/counter-app.view.test.ts b/packages/docs-site/support/tests/counter-app.view.test.ts index 1fa688c..20624ce 100644 --- a/packages/docs-site/support/tests/counter-app.view.test.ts +++ b/packages/docs-site/support/tests/counter-app.view.test.ts @@ -4,18 +4,18 @@ import { describe, expect, it, -} from "@excom/heft-rig/profiles/default/config/test-utils"; + readFileRelative, +} from "@excom/nucleus-test"; import { click, expectComplexity, flush, measureComplexity, mountView, - readViewFile, } from "@excom/quark/support/tests/view-helpers"; -const html = readViewFile(import.meta.url, "../../public/views/counter-app/counter-app.html"); -const quarkSrc = readViewFile( +const html = readFileRelative(import.meta.url, "../../public/views/counter-app/counter-app.html"); +const quarkSrc = readFileRelative( import.meta.url, "../../public/views/counter-app/counter-app.quark", ); diff --git a/packages/docs-site/support/tests/demo-utils.test.ts b/packages/docs-site/support/tests/demo-utils.test.ts index a8981b9..6ec4133 100644 --- a/packages/docs-site/support/tests/demo-utils.test.ts +++ b/packages/docs-site/support/tests/demo-utils.test.ts @@ -5,7 +5,7 @@ import { expect, it, vi, -} from "@excom/heft-rig/profiles/default/config/test-utils"; +} from "@excom/nucleus-test"; import { DEMO_FLAGS, DEMO_STORAGE_KEY, diff --git a/packages/docs-site/support/tests/flight-booker-app.view.test.ts b/packages/docs-site/support/tests/flight-booker-app.view.test.ts index b80788e..264d008 100644 --- a/packages/docs-site/support/tests/flight-booker-app.view.test.ts +++ b/packages/docs-site/support/tests/flight-booker-app.view.test.ts @@ -7,22 +7,22 @@ import { describe, expect, it, + readFileRelative, spyFetch, waitForEvent, -} from "@excom/heft-rig/profiles/default/config/test-utils"; +} from "@excom/nucleus-test"; import { expectComplexity, flush, measureComplexity, mountView, - readViewFile, } from "@excom/quark/support/tests/view-helpers"; -const html = readViewFile( +const html = readFileRelative( import.meta.url, "../../public/views/flight-booker-app/flight-booker-app.html", ); -const quarkSrc = readViewFile( +const quarkSrc = readFileRelative( import.meta.url, "../../public/views/flight-booker-app/flight-booker-app.quark", ); diff --git a/packages/docs-site/support/tests/live-app.view.test.ts b/packages/docs-site/support/tests/live-app.view.test.ts index 07490d0..885a6ed 100644 --- a/packages/docs-site/support/tests/live-app.view.test.ts +++ b/packages/docs-site/support/tests/live-app.view.test.ts @@ -11,10 +11,11 @@ import { describe, expect, it, + readFileRelative, vi, wait, waitForEvent, -} from "@excom/heft-rig/profiles/default/config/test-utils"; +} from "@excom/nucleus-test"; import { Quark } from "@excom/quark"; import { bypassSelectorCache, @@ -22,11 +23,10 @@ import { expectComplexity, flush, measureComplexity, - readViewFile, } from "@excom/quark/support/tests/view-helpers"; -const html = readViewFile(import.meta.url, "../../public/views/live-app/live-app.html"); -const quarkSrc = readViewFile( +const html = readFileRelative(import.meta.url, "../../public/views/live-app/live-app.html"); +const quarkSrc = readFileRelative( import.meta.url, "../../public/views/live-app/live-app.quark", ); diff --git a/packages/docs-site/support/tests/not-found.view.test.ts b/packages/docs-site/support/tests/not-found.view.test.ts index e32d55f..7774d1f 100644 --- a/packages/docs-site/support/tests/not-found.view.test.ts +++ b/packages/docs-site/support/tests/not-found.view.test.ts @@ -7,19 +7,19 @@ import { describe, expect, it, + readFileRelative, waitForEvent, -} from "@excom/heft-rig/profiles/default/config/test-utils"; +} from "@excom/nucleus-test"; import { bypassSelectorCache, flush, - readViewFile, } from "@excom/quark/support/tests/view-helpers"; -const html = readViewFile( +const html = readFileRelative( import.meta.url, "../../public/views/not-found/not-found.html", ); -const quarkSrc = readViewFile( +const quarkSrc = readFileRelative( import.meta.url, "../../public/views/not-found/not-found.quark", ); diff --git a/packages/docs-site/support/tests/package.view.test.ts b/packages/docs-site/support/tests/package.view.test.ts index d4cc297..96791e0 100644 --- a/packages/docs-site/support/tests/package.view.test.ts +++ b/packages/docs-site/support/tests/package.view.test.ts @@ -9,14 +9,14 @@ import { describe, expect, it, + readFileRelative, vi, waitForEvent, -} from "@excom/heft-rig/profiles/default/config/test-utils"; +} from "@excom/nucleus-test"; import { Quark } from "@excom/quark"; import { bypassSelectorCache, flush, - readViewFile, } from "@excom/quark/support/tests/view-helpers"; import { renderMarkdown } from "@excom/heft-rig/scripts/render-markdown.mjs"; import { @@ -28,11 +28,11 @@ import { type PackageMeta, } from "../../shell"; -const html = readViewFile( +const html = readFileRelative( import.meta.url, "../../public/views/package/package.html", ); -const quarkSrc = readViewFile( +const quarkSrc = readFileRelative( import.meta.url, "../../public/views/package/package.quark", ); @@ -49,7 +49,7 @@ const shellStub = { /** One `## ` section of a site guide, rendered like the site meta. */ const guideSection = (file: string, heading: string) => { - const md = readViewFile(import.meta.url, `../docs/${file}`); + const md = readFileRelative(import.meta.url, `../docs/${file}`); const section = md .split(/\n(?=## )/) .find((s) => s.startsWith(`## ${heading}\n`)); @@ -121,6 +121,18 @@ const siteMeta = { exportedFiles: {}, }; +/** The closing details `build-package-metas` appends to a README with release notes. */ +const releaseNotes = + '
\nRelease notes\n' + + "

1.0.0

\n
    \n
  • Add x
  • \n
\n" + + "
\n"; + +const notedMeta: PackageMeta = { + ...neutronMeta, + shortName: "noted", + readme: `${neutronMeta.readme}${releaseNotes}`, +}; + const requested: string[] = []; const mockFetch = () => @@ -129,9 +141,11 @@ const mockFetch = () => requested.push(url); const body = url.endsWith("/neutron.json") ? neutronMeta - : url.endsWith("/docs-site.json") - ? siteMeta - : null; + : url.endsWith("/noted.json") + ? notedMeta + : url.endsWith("/docs-site.json") + ? siteMeta + : null; return new Response(JSON.stringify(body), { status: body ? 200 : 404, headers: { "content-type": "application/json" }, @@ -319,6 +333,29 @@ describe("package view", () => { expect(page.querySelector(".md-content")?.innerHTML).toBe(""); }); + it("ends the README article with the release notes its meta carries, closed", async () => { + const { page } = await mountPage({ packageName: "noted" }); + + const notes = page.querySelector( + ".md-content > details.release-notes:last-child", + )!; + expect(notes.open).toBe(false); + expect(notes.querySelector("summary")?.textContent).toBe("Release notes"); + expect(notes.querySelector("h3")?.textContent).toBe("1.0.0 2026-09-30"); + expect(notes.querySelector("li")?.innerHTML).toBe("Add x"); + expect(page.querySelectorAll(".release-notes")).toHaveLength(1); + }); + + it("keeps release notes off the doc pages of that package", async () => { + const { page } = await mountPage({ + packageName: "noted", + docName: "props", + }); + + expect(page.querySelector(".md-content h1")?.textContent).toBe("Props"); + expect(page.querySelector(".release-notes")).toBeNull(); + }); + it("marks guide links the router has a past visit to", async () => { const quickStart = "/nucleus/docs/quick_start"; const styling = "/nucleus/docs/styling"; diff --git a/packages/docs-site/support/tests/release-notice.view.test.ts b/packages/docs-site/support/tests/release-notice.view.test.ts index a20b3a4..8146270 100644 --- a/packages/docs-site/support/tests/release-notice.view.test.ts +++ b/packages/docs-site/support/tests/release-notice.view.test.ts @@ -8,17 +8,17 @@ import { expect, fixture, it, + readFileRelative, spyFetch, vi, waitForEvent, -} from "@excom/heft-rig/profiles/default/config/test-utils"; +} from "@excom/nucleus-test"; import { flush, mountView as mountWithSheet, - readViewFile, } from "@excom/quark/support/tests/view-helpers"; -const html = readViewFile( +const html = readFileRelative( import.meta.url, "../../public/views/release-notice/release-notice.html", ); @@ -27,7 +27,7 @@ const stripAssets = (s: string) => s.replace(//g, ""); /** The `#release-notice { … }` rule of the shell sheet in `index.html`. */ const shellRule = () => { - const shell = readViewFile(import.meta.url, "../../index.html"); + const shell = readFileRelative(import.meta.url, "../../index.html"); const start = shell.indexOf("#release-notice {"); let depth = 0; for (let i = shell.indexOf("{", start); i < shell.length; i++) { diff --git a/packages/docs-site/support/tests/returns-app.view.test.ts b/packages/docs-site/support/tests/returns-app.view.test.ts index 05cbb61..336d0b8 100644 --- a/packages/docs-site/support/tests/returns-app.view.test.ts +++ b/packages/docs-site/support/tests/returns-app.view.test.ts @@ -8,23 +8,23 @@ import { describe, expect, it, + readFileRelative, spyFetch, waitForEvent, -} from "@excom/heft-rig/profiles/default/config/test-utils"; +} from "@excom/nucleus-test"; import { bypassSelectorCache, expectComplexity, flush, measureComplexity, mountView, - readViewFile, } from "@excom/quark/support/tests/view-helpers"; -const html = readViewFile( +const html = readFileRelative( import.meta.url, "../../public/views/returns-app/returns-app.html" ); -const quarkSrc = readViewFile( +const quarkSrc = readFileRelative( import.meta.url, "../../public/views/returns-app/returns-app.quark" ); diff --git a/packages/docs-site/support/tests/shell.test.ts b/packages/docs-site/support/tests/shell.test.ts index b7594b8..2aa5a1e 100644 --- a/packages/docs-site/support/tests/shell.test.ts +++ b/packages/docs-site/support/tests/shell.test.ts @@ -4,11 +4,11 @@ import { describe, expect, it, + readFileRelative, vi, -} from "@excom/heft-rig/profiles/default/config/test-utils"; +} from "@excom/nucleus-test"; import { readdirSync, readFileSync } from "node:fs"; import { KitRoute, KitRouter } from "@excom/kit-router"; -import { readViewFile } from "@excom/quark/support/tests/view-helpers"; import { createRequire } from "node:module"; import { dirname, resolve } from "node:path"; import { fileURLToPath } from "node:url"; @@ -614,7 +614,7 @@ type SiteRoute = { const siteRoutes = (): SiteRoute[] => { // ``s are dropped: happy-dom would try to fetch them while parsing. - const shell = readViewFile(import.meta.url, "../../index.html").replace( + const shell = readFileRelative(import.meta.url, "../../index.html").replace( //g, "" ); @@ -660,7 +660,7 @@ describe("site route table", () => { /* The two areas differ only by the company route's title: every docs route is untitled, so `spa-manager` puts `index.html`'s own `` back. */ it("carries the company title on the company route alone", () => { - const shell = readViewFile(import.meta.url, "../../index.html"); + const shell = readFileRelative(import.meta.url, "../../index.html"); expect(shell).toContain("<title>Nucleus · docs"); expect(routes[0]!.documentTitle).toBe("Excom"); expect(routes.filter((r) => r.documentTitle)).toHaveLength(1); diff --git a/packages/docs-site/support/tests/temperature-app.view.test.ts b/packages/docs-site/support/tests/temperature-app.view.test.ts index e5fa111..f5ce0b7 100644 --- a/packages/docs-site/support/tests/temperature-app.view.test.ts +++ b/packages/docs-site/support/tests/temperature-app.view.test.ts @@ -6,19 +6,19 @@ import { describe, expect, it, -} from "@excom/heft-rig/profiles/default/config/test-utils"; + readFileRelative, +} from "@excom/nucleus-test"; import { expectComplexity, flush, measureComplexity, mountView, - readViewFile, } from "@excom/quark/support/tests/view-helpers"; -const html = readViewFile( +const html = readFileRelative( import.meta.url, "../../public/views/temperature-app/temperature-app.html", ); -const quarkSrc = readViewFile( +const quarkSrc = readFileRelative( import.meta.url, "../../public/views/temperature-app/temperature-app.quark", ); diff --git a/packages/docs-site/support/tests/timer-app.view.test.ts b/packages/docs-site/support/tests/timer-app.view.test.ts index 3e86e90..9da888a 100644 --- a/packages/docs-site/support/tests/timer-app.view.test.ts +++ b/packages/docs-site/support/tests/timer-app.view.test.ts @@ -5,18 +5,18 @@ import { describe, expect, it, -} from "@excom/heft-rig/profiles/default/config/test-utils"; + readFileRelative, +} from "@excom/nucleus-test"; import { click, expectComplexity, flush, measureComplexity, mountView, - readViewFile, } from "@excom/quark/support/tests/view-helpers"; -const html = readViewFile(import.meta.url, "../../public/views/timer-app/timer-app.html"); -const quarkSrc = readViewFile( +const html = readFileRelative(import.meta.url, "../../public/views/timer-app/timer-app.html"); +const quarkSrc = readFileRelative( import.meta.url, "../../public/views/timer-app/timer-app.quark", ); diff --git a/packages/docs-site/support/tests/todo-app.view.test.ts b/packages/docs-site/support/tests/todo-app.view.test.ts index ca47027..04299f1 100644 --- a/packages/docs-site/support/tests/todo-app.view.test.ts +++ b/packages/docs-site/support/tests/todo-app.view.test.ts @@ -6,19 +6,19 @@ import { describe, expect, it, + readFileRelative, spyFetch, waitForEvent, -} from "@excom/heft-rig/profiles/default/config/test-utils"; +} from "@excom/nucleus-test"; import { expectComplexity, flush, measureComplexity, mountView, - readViewFile, } from "@excom/quark/support/tests/view-helpers"; -const html = readViewFile(import.meta.url, "../../public/views/todo-app/todo-app.html"); -const quarkSrc = readViewFile(import.meta.url, "../../public/views/todo-app/todo-app.quark"); +const html = readFileRelative(import.meta.url, "../../public/views/todo-app/todo-app.html"); +const quarkSrc = readFileRelative(import.meta.url, "../../public/views/todo-app/todo-app.quark"); const todos = [ { id: 1, title: "Buy milk", completed: false }, diff --git a/packages/docs-site/support/tests/view-transitions-app.view.test.ts b/packages/docs-site/support/tests/view-transitions-app.view.test.ts index 94fb2f8..e574107 100644 --- a/packages/docs-site/support/tests/view-transitions-app.view.test.ts +++ b/packages/docs-site/support/tests/view-transitions-app.view.test.ts @@ -7,7 +7,8 @@ import { describe, expect, it, -} from "@excom/heft-rig/profiles/default/config/test-utils"; + readFileRelative, +} from "@excom/nucleus-test"; import { installViewTransitionStub } from "@excom/quark/support/tests/helpers"; import { bypassSelectorCache, @@ -16,11 +17,10 @@ import { flush, measureComplexity, mountView, - readViewFile, } from "@excom/quark/support/tests/view-helpers"; -const html = readViewFile(import.meta.url, "../../public/views/view-transitions-app/view-transitions-app.html"); -const quarkSrc = readViewFile(import.meta.url, "../../public/views/view-transitions-app/view-transitions-app.quark"); +const html = readFileRelative(import.meta.url, "../../public/views/view-transitions-app/view-transitions-app.html"); +const quarkSrc = readFileRelative(import.meta.url, "../../public/views/view-transitions-app/view-transitions-app.quark"); /** Past the first render, whose paints never transition. */ const settle = async () => { diff --git a/packages/dom-observer/package.json b/packages/dom-observer/package.json index fe84da8..3433648 100644 --- a/packages/dom-observer/package.json +++ b/packages/dom-observer/package.json @@ -27,7 +27,8 @@ }, "peerDependencies": {}, "devDependencies": { - "@excom/heft-rig": "workspace:^" + "@excom/heft-rig": "workspace:^", + "@excom/nucleus-test": "workspace:^" }, "repository": { "url": "excom-dev/nucleus", @@ -45,4 +46,4 @@ "documented": true, "packageType": "kit-element" } -} +} \ No newline at end of file diff --git a/packages/dom-observer/support/tests/dom-observer.test.ts b/packages/dom-observer/support/tests/dom-observer.test.ts index b21ba81..e1b97f1 100644 --- a/packages/dom-observer/support/tests/dom-observer.test.ts +++ b/packages/dom-observer/support/tests/dom-observer.test.ts @@ -7,7 +7,7 @@ import { it, vi, wait, -} from "@excom/heft-rig/profiles/default/config/test-utils"; +} from "@excom/nucleus-test"; import "../../index"; describe("dom-observer", () => { diff --git a/packages/dom-observer/support/tests/simple.view.test.ts b/packages/dom-observer/support/tests/simple.view.test.ts index f38c3c7..31e35ee 100644 --- a/packages/dom-observer/support/tests/simple.view.test.ts +++ b/packages/dom-observer/support/tests/simple.view.test.ts @@ -5,13 +5,13 @@ import { describe, expect, it, -} from "@excom/heft-rig/profiles/default/config/test-utils"; + readDemo, +} from "@excom/nucleus-test"; import { expectComplexity, flush, measureComplexity, mountView, - readDemo, } from "@excom/quark/support/tests/view-helpers"; describe("simple view", () => { diff --git a/packages/event-handler/package.json b/packages/event-handler/package.json index 833b8ef..db30083 100644 --- a/packages/event-handler/package.json +++ b/packages/event-handler/package.json @@ -28,7 +28,8 @@ }, "peerDependencies": {}, "devDependencies": { - "@excom/heft-rig": "workspace:^" + "@excom/heft-rig": "workspace:^", + "@excom/nucleus-test": "workspace:^" }, "repository": { "url": "excom-dev/nucleus", @@ -44,4 +45,4 @@ "excom": { "packageType": "kit-element" } -} +} \ No newline at end of file diff --git a/packages/event-handler/support/tests/command-dialog.view.test.ts b/packages/event-handler/support/tests/command-dialog.view.test.ts index 321d202..69c7cdb 100644 --- a/packages/event-handler/support/tests/command-dialog.view.test.ts +++ b/packages/event-handler/support/tests/command-dialog.view.test.ts @@ -4,12 +4,12 @@ import { describe, expect, it, -} from "@excom/heft-rig/profiles/default/config/test-utils"; + readDemo, +} from "@excom/nucleus-test"; import { click, flush, mountView, - readDemo, } from "@excom/quark/support/tests/view-helpers"; describe("command-dialog view", () => { diff --git a/packages/event-handler/support/tests/debounce.view.test.ts b/packages/event-handler/support/tests/debounce.view.test.ts index 673e9ef..4a2d024 100644 --- a/packages/event-handler/support/tests/debounce.view.test.ts +++ b/packages/event-handler/support/tests/debounce.view.test.ts @@ -5,14 +5,14 @@ import { describe, expect, it, + readDemo, vi, -} from "@excom/heft-rig/profiles/default/config/test-utils"; +} from "@excom/nucleus-test"; import { expectComplexity, flush, measureComplexity, mountView, - readDemo, } from "@excom/quark/support/tests/view-helpers"; describe("debounce view", () => { diff --git a/packages/event-handler/support/tests/enter-close.view.test.ts b/packages/event-handler/support/tests/enter-close.view.test.ts index e5f65d8..90295a5 100644 --- a/packages/event-handler/support/tests/enter-close.view.test.ts +++ b/packages/event-handler/support/tests/enter-close.view.test.ts @@ -5,12 +5,12 @@ import { describe, expect, it, -} from "@excom/heft-rig/profiles/default/config/test-utils"; + readDemo, +} from "@excom/nucleus-test"; import { click, flush, mountView, - readDemo, } from "@excom/quark/support/tests/view-helpers"; describe("enter-close view", () => { diff --git a/packages/event-handler/support/tests/escape-close.view.test.ts b/packages/event-handler/support/tests/escape-close.view.test.ts index ffd4776..632ceac 100644 --- a/packages/event-handler/support/tests/escape-close.view.test.ts +++ b/packages/event-handler/support/tests/escape-close.view.test.ts @@ -4,12 +4,12 @@ import { describe, expect, it, -} from "@excom/heft-rig/profiles/default/config/test-utils"; + readDemo, +} from "@excom/nucleus-test"; import { click, flush, mountView, - readDemo, } from "@excom/quark/support/tests/view-helpers"; describe("escape-close view", () => { diff --git a/packages/event-handler/support/tests/event-handler.form-fallback.test.ts b/packages/event-handler/support/tests/event-handler.form-fallback.test.ts index 3eef231..1eee7a3 100644 --- a/packages/event-handler/support/tests/event-handler.form-fallback.test.ts +++ b/packages/event-handler/support/tests/event-handler.form-fallback.test.ts @@ -5,7 +5,7 @@ import { expect, fixture, it, -} from "@excom/heft-rig/profiles/default/config/test-utils"; +} from "@excom/nucleus-test"; /* * `mutate-target` guards a form that yields no data. `formToJson` always diff --git a/packages/event-handler/support/tests/event-handler.test.ts b/packages/event-handler/support/tests/event-handler.test.ts index 284a97e..5f16232 100644 --- a/packages/event-handler/support/tests/event-handler.test.ts +++ b/packages/event-handler/support/tests/event-handler.test.ts @@ -6,7 +6,7 @@ import { it, vi, wait, -} from "@excom/heft-rig/profiles/default/config/test-utils"; +} from "@excom/nucleus-test"; import "../../index"; if (!navigator.vibrate) { diff --git a/packages/event-handler/support/tests/fire-event.view.test.ts b/packages/event-handler/support/tests/fire-event.view.test.ts index 929dfef..130c024 100644 --- a/packages/event-handler/support/tests/fire-event.view.test.ts +++ b/packages/event-handler/support/tests/fire-event.view.test.ts @@ -5,14 +5,14 @@ import { describe, expect, it, -} from "@excom/heft-rig/profiles/default/config/test-utils"; + readDemo, +} from "@excom/nucleus-test"; import { click, expectComplexity, flush, measureComplexity, mountView, - readDemo, } from "@excom/quark/support/tests/view-helpers"; describe("fire-event view", () => { diff --git a/packages/event-handler/support/tests/prevent-default.view.test.ts b/packages/event-handler/support/tests/prevent-default.view.test.ts index 45d8d43..5146878 100644 --- a/packages/event-handler/support/tests/prevent-default.view.test.ts +++ b/packages/event-handler/support/tests/prevent-default.view.test.ts @@ -4,8 +4,9 @@ import { describe, expect, it, -} from "@excom/heft-rig/profiles/default/config/test-utils"; -import { mountView, readDemo } from "@excom/quark/support/tests/view-helpers"; + readDemo, +} from "@excom/nucleus-test"; +import { mountView } from "@excom/quark/support/tests/view-helpers"; describe("prevent-default view", () => { afterEach(() => { diff --git a/packages/event-handler/support/tests/retarget.view.test.ts b/packages/event-handler/support/tests/retarget.view.test.ts index 51f25d0..60f5435 100644 --- a/packages/event-handler/support/tests/retarget.view.test.ts +++ b/packages/event-handler/support/tests/retarget.view.test.ts @@ -5,14 +5,14 @@ import { describe, expect, it, -} from "@excom/heft-rig/profiles/default/config/test-utils"; + readDemo, +} from "@excom/nucleus-test"; import { click, expectComplexity, flush, measureComplexity, mountView, - readDemo, } from "@excom/quark/support/tests/view-helpers"; describe("retarget view", () => { diff --git a/packages/event-handler/support/tests/with-as.view.test.ts b/packages/event-handler/support/tests/with-as.view.test.ts index c7d6ae7..49126a7 100644 --- a/packages/event-handler/support/tests/with-as.view.test.ts +++ b/packages/event-handler/support/tests/with-as.view.test.ts @@ -5,12 +5,12 @@ import { describe, expect, it, -} from "@excom/heft-rig/profiles/default/config/test-utils"; + readDemo, +} from "@excom/nucleus-test"; import { click, flush, mountView, - readDemo, } from "@excom/quark/support/tests/view-helpers"; describe("with-as view", () => { diff --git a/packages/fetchable-element/package.json b/packages/fetchable-element/package.json index 18b727e..db48646 100644 --- a/packages/fetchable-element/package.json +++ b/packages/fetchable-element/package.json @@ -30,7 +30,8 @@ }, "peerDependencies": {}, "devDependencies": { - "@excom/heft-rig": "workspace:^" + "@excom/heft-rig": "workspace:^", + "@excom/nucleus-test": "workspace:^" }, "repository": { "url": "excom-dev/nucleus", @@ -48,4 +49,4 @@ "excom": { "packageType": "element-base" } -} +} \ No newline at end of file diff --git a/packages/fetchable-element/support/tests/fetch-lifecycle.test.ts b/packages/fetchable-element/support/tests/fetch-lifecycle.test.ts index 102a53e..830ee0d 100644 --- a/packages/fetchable-element/support/tests/fetch-lifecycle.test.ts +++ b/packages/fetchable-element/support/tests/fetch-lifecycle.test.ts @@ -9,7 +9,7 @@ import { vi, wait, waitForEvent, -} from "@excom/heft-rig/profiles/default/config/test-utils"; +} from "@excom/nucleus-test"; import { KitLogger } from "@excom/kit-logger"; const TAG = "fetchable-lifecycle-test"; diff --git a/packages/fetchable-element/support/tests/fetchable-element.test.ts b/packages/fetchable-element/support/tests/fetchable-element.test.ts index a72d72d..f3429c2 100644 --- a/packages/fetchable-element/support/tests/fetchable-element.test.ts +++ b/packages/fetchable-element/support/tests/fetchable-element.test.ts @@ -6,7 +6,7 @@ import { fixture, it, vi, -} from "@excom/heft-rig/profiles/default/config/test-utils"; +} from "@excom/nucleus-test"; import { KitLogger } from "@excom/kit-logger"; const TAG = "fetchable-element-test"; diff --git a/packages/gesture-handler/package.json b/packages/gesture-handler/package.json index 2430f09..7902dc1 100644 --- a/packages/gesture-handler/package.json +++ b/packages/gesture-handler/package.json @@ -31,6 +31,7 @@ "@excom/content-drawer": "workspace:^", "@excom/event-handler": "workspace:^", "@excom/heft-rig": "workspace:^", + "@excom/nucleus-test": "workspace:^", "@excom/quark": "workspace:^", "@excom/quark-sheet": "workspace:^" }, @@ -52,4 +53,4 @@ "excom": { "packageType": "kit-element" } -} +} \ No newline at end of file diff --git a/packages/gesture-handler/support/tests/carousel.view.test.ts b/packages/gesture-handler/support/tests/carousel.view.test.ts index 0c22f8f..351d989 100644 --- a/packages/gesture-handler/support/tests/carousel.view.test.ts +++ b/packages/gesture-handler/support/tests/carousel.view.test.ts @@ -6,13 +6,13 @@ import { describe, expect, it, + readDemo, vi, wait, -} from "@excom/heft-rig/profiles/default/config/test-utils"; +} from "@excom/nucleus-test"; import { flush, mountView, - readDemo, } from "@excom/quark/support/tests/view-helpers"; import { drag } from "./pointer-utils"; diff --git a/packages/gesture-handler/support/tests/gesture-handler.test.ts b/packages/gesture-handler/support/tests/gesture-handler.test.ts index 4173dd8..2db110f 100644 --- a/packages/gesture-handler/support/tests/gesture-handler.test.ts +++ b/packages/gesture-handler/support/tests/gesture-handler.test.ts @@ -6,7 +6,7 @@ import { it, vi, wait, -} from "@excom/heft-rig/profiles/default/config/test-utils"; +} from "@excom/nucleus-test"; import "../../index"; type PointerInit = { diff --git a/packages/gesture-handler/support/tests/sheet.view.test.ts b/packages/gesture-handler/support/tests/sheet.view.test.ts index 18aba77..5b069eb 100644 --- a/packages/gesture-handler/support/tests/sheet.view.test.ts +++ b/packages/gesture-handler/support/tests/sheet.view.test.ts @@ -6,12 +6,12 @@ import { describe, expect, it, + readDemo, wait, -} from "@excom/heft-rig/profiles/default/config/test-utils"; +} from "@excom/nucleus-test"; import { flush, mountView, - readDemo, } from "@excom/quark/support/tests/view-helpers"; import { drag, frame, pull } from "./pointer-utils"; diff --git a/packages/gesture-handler/support/tests/swipe.view.test.ts b/packages/gesture-handler/support/tests/swipe.view.test.ts index 4d10520..507c194 100644 --- a/packages/gesture-handler/support/tests/swipe.view.test.ts +++ b/packages/gesture-handler/support/tests/swipe.view.test.ts @@ -5,12 +5,12 @@ import { describe, expect, it, + readDemo, wait, -} from "@excom/heft-rig/profiles/default/config/test-utils"; +} from "@excom/nucleus-test"; import { flush, mountView, - readDemo, } from "@excom/quark/support/tests/view-helpers"; import { drag, tap } from "./pointer-utils"; diff --git a/packages/hash-object/package.json b/packages/hash-object/package.json index 03f45c1..5c88385 100644 --- a/packages/hash-object/package.json +++ b/packages/hash-object/package.json @@ -21,7 +21,8 @@ "dependencies": {}, "peerDependencies": {}, "devDependencies": { - "@excom/heft-rig": "workspace:^" + "@excom/heft-rig": "workspace:^", + "@excom/nucleus-test": "workspace:^" }, "repository": { "url": "excom-dev/nucleus", @@ -35,4 +36,4 @@ "excom": { "packageType": "library" } -} +} \ No newline at end of file diff --git a/packages/heft-rig/package.json b/packages/heft-rig/package.json index 953ac3b..c4930fa 100644 --- a/packages/heft-rig/package.json +++ b/packages/heft-rig/package.json @@ -14,7 +14,7 @@ ], "scripts": { "build": "node -e \"console.log('heft-rig: no build output')\"", - "build:watch": "node -e \"console.log('heft-rig: no build watch')", + "build:watch": "node -e \"console.log('heft-rig: no build watch')\"", "format": "node -e \"console.log('heft-rig: no format')\"", "test": "node scripts/vitest.mjs", "coverage": "node scripts/coverage.mjs", @@ -24,7 +24,6 @@ }, "dependencies": { "@microsoft/api-extractor": "^7.55.5", - "@open-wc/semantic-dom-diff": "^0.20.1", "@rushstack/heft": "^1.1.7", "@rushstack/heft-typescript-plugin": "^1.1.7", "@types/dom-view-transitions": "^1.0.5", @@ -59,4 +58,4 @@ "documented": false, "packageType": "heft-rig" } -} +} \ No newline at end of file diff --git a/packages/heft-rig/profiles/default/config/command-shim.ts b/packages/heft-rig/profiles/default/config/command-shim.ts deleted file mode 100644 index e6a8d09..0000000 --- a/packages/heft-rig/profiles/default/config/command-shim.ts +++ /dev/null @@ -1,58 +0,0 @@ -/** - * happy-dom has no HTML Command API. Emulate the part the stack relies on - * in view tests: `button.command` / `button.commandForElement`, and a click - * on a `