| Property | Modifiers | Type | Description |
| ----------------- | --------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| [basePathname](#) | readonly
| string | The base pathname of the request, which can be configured at build time. Defaults to /
. |
-| [cacheControl](#) | readonly
| (cacheControl: [CacheControl](#cachecontrol), target?: CacheControlTarget) => void | Convenience method to set the Cache-Control header. Depending on your CDN, you may want to add another cacheControl with the second argument set to CDN-Cache-Control
or any other value (we provide the most common values for auto-complete, but you can use any string you want).
See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control and https://qwik.builder.io/docs/caching/#CDN-Cache-Controls for more information.
|
+| [cacheControl](#) | readonly
| (cacheControl: [CacheControl](#cachecontrol), target?: CacheControlTarget) => void | Convenience method to set the Cache-Control header. Depending on your CDN, you may want to add another cacheControl with the second argument set to CDN-Cache-Control
or any other value (we provide the most common values for auto-complete, but you can use any string you want).
See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control and https://qwik.builder.io/docs/caching/\#CDN-Cache-Controls for more information.
|
| [clientConn](#) | readonly
| [ClientConn](#clientconn) | Provides information about the client connection, such as the IP address and the country the request originated from. |
| [cookie](#) | readonly
| [Cookie](#cookie) | HTTP request and response cookie. Use the get()
method to retrieve a request cookie value. Use the set()
method to set a response cookie value.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies
|
| [env](#) | readonly
| [EnvGetter](#envgetter) | Platform provided environment variables. |
diff --git a/packages/docs/src/routes/api/qwik/api.json b/packages/docs/src/routes/api/qwik/api.json
index 1ac65209b0c..da891ed310a 100644
--- a/packages/docs/src/routes/api/qwik/api.json
+++ b/packages/docs/src/routes/api/qwik/api.json
@@ -1848,7 +1848,7 @@
}
],
"kind": "Interface",
- "content": "```typescript\nexport interface QwikKeyboardEvent extends SyntheticEvent \n```\n**Extends:** SyntheticEvent<T, [NativeKeyboardEvent](#nativekeyboardevent)>\n\n\n| Property | Modifiers | Type | Description |\n| --- | --- | --- | --- |\n| [altKey](#) | | boolean | |\n| [charCode](#) | | number | |\n| [ctrlKey](#) | | boolean | |\n| [isComposing](#) | | boolean | |\n| [key](#) | | string | See the \\[DOM Level 3 Events spec\\](https://www.w3.org/TR/uievents-key/\\#named-key-attribute-values). for possible values |\n| [keyCode](#) | | number | |\n| [locale](#) | | string | |\n| [location](#) | | number | |\n| [metaKey](#) | | boolean | |\n| [repeat](#) | | boolean | |\n| [shiftKey](#) | | boolean | |\n| [which](#) | | number | |\n\n\n| Method | Description |\n| --- | --- |\n| [getModifierState(key)](#qwikkeyboardevent-getmodifierstate) | See \\[DOM Level 3 Events spec\\](https://www.w3.org/TR/uievents-key/\\#keys-modifier). for a list of valid (case-sensitive) arguments to this method. |",
+ "content": "```typescript\nexport interface QwikKeyboardEvent extends SyntheticEvent \n```\n**Extends:** SyntheticEvent<T, [NativeKeyboardEvent](#nativekeyboardevent)>\n\n\n| Property | Modifiers | Type | Description |\n| --- | --- | --- | --- |\n| [altKey](#) | | boolean | |\n| [charCode](#) | | number | |\n| [code](#) | | string | |\n| [ctrlKey](#) | | boolean | |\n| [isComposing](#) | | boolean | |\n| [key](#) | | string | See the \\[DOM Level 3 Events spec\\](https://www.w3.org/TR/uievents-key/\\#named-key-attribute-values). for possible values |\n| [keyCode](#) | | number | |\n| [locale](#) | | string | |\n| [location](#) | | number | |\n| [metaKey](#) | | boolean | |\n| [repeat](#) | | boolean | |\n| [shiftKey](#) | | boolean | |\n| [which](#) | | number | |\n\n\n| Method | Description |\n| --- | --- |\n| [getModifierState(key)](#qwikkeyboardevent-getmodifierstate) | See \\[DOM Level 3 Events spec\\](https://www.w3.org/TR/uievents-key/\\#keys-modifier). for a list of valid (case-sensitive) arguments to this method. |",
"editUrl": "https://github.com/BuilderIO/qwik/tree/main/packages/qwik/src/core/render/jsx/types/jsx-qwik-events.ts",
"mdFile": "qwik.qwikkeyboardevent.md"
},
diff --git a/packages/docs/src/routes/api/qwik/index.md b/packages/docs/src/routes/api/qwik/index.md
index d1233fe2a2b..71674cd86fd 100644
--- a/packages/docs/src/routes/api/qwik/index.md
+++ b/packages/docs/src/routes/api/qwik/index.md
@@ -1924,7 +1924,7 @@ At times it is necessary to store values on a store that are non-serializable. N
You can use `noSerialize()` to mark a value as non-serializable. The value is persisted in the Store but does not survive serialization. The implication is that when your application is resumed, the value of this object will be `undefined`. You will be responsible for recovering from this.
-See: [noSerialize Tutorial](http://qwik.builder.io/tutorial/store/no-serialize)
+See: [noSerialize Tutorial](https://qwik.builder.io/tutorial/store/no-serialize)
```typescript
noSerialize: (input: T) => NoSerialize;
@@ -2385,6 +2385,7 @@ export interface QwikKeyboardEvent extends SyntheticEvent {
### Caveats
- The provided value will not be globally available across the whole render tree, but only to descendant components in the tree.
+- If the context isn't used during SSR, it will not be serialized. So if you want to have the context available in the client even though you don't use it during SSR, you can call `useContext()` in the parent component to force it to be serialized.
## `useContext()`
diff --git a/packages/docs/src/routes/docs/(qwik)/components/slots/index.mdx b/packages/docs/src/routes/docs/(qwik)/components/slots/index.mdx
index 5d90b36d853..9becd79e047 100644
--- a/packages/docs/src/routes/docs/(qwik)/components/slots/index.mdx
+++ b/packages/docs/src/routes/docs/(qwik)/components/slots/index.mdx
@@ -235,3 +235,11 @@ The two approaches can best be described as declarative vs imperative. They both
Qwik uses the declarative projection approach. The reason for this is that Qwik needs to be able to render parent/children components independently from each other. With an imperative (`children`) approach, the child component can modify the `children` in countless ways. If a child component relied on `children`, it would be forced to re-render whenever a parent component would re-render to reapply the imperative transformation to the `children`. The extra rendering goes explicitly against the goals of Qwik components rendering in isolation.
> **Note**: Due to Slots being declarative in Qwik, projection with `` will only work if the parent component is wrapped in `component$()`. If parent component is not wrapped in `component$()`, it is considered an [inline component](/docs/components/overview/#inline-components) and `` will not work.
+
+### Advanced: Slots and Context
+
+Slotted components have access to the [Context](../context/) of their parent component, even while they aren't being projected. Furthermore, if the parent is projecting the `` inside another component, the slotted components will also have access to the Contexts of that deeper component.
+
+However, if a component hasn't been projected yet because the `` are rendered conditionally, it's impossible to know about the deeper Context, and then the slotted component will only see the Context of the immediate parent.
+
+As such, it's safest to avoid these situations; if you are providing Contexts, don't conditionally render your ``.
diff --git a/packages/docs/src/routes/docs/(qwik)/components/tasks/index.mdx b/packages/docs/src/routes/docs/(qwik)/components/tasks/index.mdx
index a0bc1e9c4d8..c73ef9c37f2 100644
--- a/packages/docs/src/routes/docs/(qwik)/components/tasks/index.mdx
+++ b/packages/docs/src/routes/docs/(qwik)/components/tasks/index.mdx
@@ -438,6 +438,20 @@ const Clock = component$<{ isRunning: Signal }>(({ isRunning }) => {
> In this example the clock starts running immediately on the browser regardless of whether it is visible or not.
+### Advanced: Time of running, and managing visibility with CSS
+
+Internally, `useVisibleTask$` is implemented by adding an attribute on the first rendered component (either the returned component or in case of a Fragment, its first child). With the standard `eagerness`, this means that if the first rendered component is hidden, the task will not run.
+
+This means that you can use CSS to influence when the task runs. For example, if the task should only run on a mobile device, you can return a `` (in the case of Tailwind CSS).
+
+This also means you cannot unhide a component using a visible task; for that you can return a Fragment:
+
+```tsx
+return (<>
+
+
+>)
+```
## Use Hook Rules
diff --git a/packages/docs/src/routes/docs/(qwik)/getting-started/index.mdx b/packages/docs/src/routes/docs/(qwik)/getting-started/index.mdx
index 7df37a09331..41d81ce77ef 100644
--- a/packages/docs/src/routes/docs/(qwik)/getting-started/index.mdx
+++ b/packages/docs/src/routes/docs/(qwik)/getting-started/index.mdx
@@ -23,6 +23,7 @@ contributors:
- dustinsgoodman
- nsdonato
- seqshem
+ - daniela-bonvini
---
import CodeSandbox from '../../../../components/code-sandbox/index.tsx';
@@ -48,7 +49,7 @@ To get started with Qwik locally, you need the following:
First, create a Qwik application with the Qwik CLI, which generates a blank starter so that you can quickly familiarize yourself with it.
-Run the Qwik CLI in your shell. Qwik supports NPM, yarn and pnpm. Choose the package manager you prefer and run one of the following commands:
+Run the Qwik CLI in your shell. Qwik supports npm, yarn, pnpm and bun. Choose the package manager you prefer and run one of the following commands:
```shell
npm create qwik@latest
diff --git a/packages/docs/src/routes/docs/(qwikcity)/middleware/index.mdx b/packages/docs/src/routes/docs/(qwikcity)/middleware/index.mdx
index f2873acb8b2..e1da92a97dd 100644
--- a/packages/docs/src/routes/docs/(qwikcity)/middleware/index.mdx
+++ b/packages/docs/src/routes/docs/(qwikcity)/middleware/index.mdx
@@ -5,6 +5,7 @@ contributors:
- manucorporat
- mhevery
- CoralWombat
+ - harishkrishnan24
---
import CodeSandbox from '../../../../components/code-sandbox/index.tsx';
@@ -47,7 +48,7 @@ Each middleware function is passed a [`RequestEvent`](#requestevent) object whic
## Order of invocation
-The order middleware function chain is determined by their location. Starting from the topmost `layout.tsx` and ending at the `index.tsx` for a given route. (Same resolution logic as the order of layout and route component as defined by the route path.)
+The order of middleware function chain is determined by their location. Starting from the topmost `layout.tsx` and ending at the `index.tsx` for a given route. (Same resolution logic as the order of layout and route component as defined by the route path.)
For example, if the request is `/api/greet/` in the following folder structure, the invocation order is as follows:
diff --git a/packages/docs/src/routes/docs/(qwikcity)/validator/index.mdx b/packages/docs/src/routes/docs/(qwikcity)/validator/index.mdx
index 86ff06731a0..7a476bff0c4 100644
--- a/packages/docs/src/routes/docs/(qwikcity)/validator/index.mdx
+++ b/packages/docs/src/routes/docs/(qwikcity)/validator/index.mdx
@@ -2,6 +2,7 @@
title: Validators | QwikCity
contributors:
- wtlin1228
+ - harishkrishnan24
---
# Data Validators
@@ -75,7 +76,7 @@ export const useAction = routeAction$(
);
```
-If `validator3` has a `data` property in its success return object, this data will be passed to the next validator, `validator2`. If your don't want to override the original submitted data, avoid putting the `data` property in the success return object.
+If `validator3` has a `data` property in its success return object, this data will be passed to the next validator, `validator2`. If you don't want to override the original submitted data, avoid putting the `data` property in the success return object.
```tsx /message: "hi, I am validator3"/#a /message: "hi, I am validator2"/#b /message: "hi, I am validator1"/#c
export const useAction = routeAction$(
@@ -174,4 +175,4 @@ export const useAction = routeAction$(
validator$(/*...*/),
validator$(/*...*/),
);
-```
\ No newline at end of file
+```
diff --git a/packages/docs/src/routes/docs/integrations/authjs/index.mdx b/packages/docs/src/routes/docs/integrations/authjs/index.mdx
index ec90a090a4c..7ca486ecd4c 100644
--- a/packages/docs/src/routes/docs/integrations/authjs/index.mdx
+++ b/packages/docs/src/routes/docs/integrations/authjs/index.mdx
@@ -5,6 +5,7 @@ contributors:
- the-r3aper7
- ulic75
- jakovljevic-mladen
+ - VarPDev
---
# Auth.js
diff --git a/packages/docs/src/routes/docs/labs/insights/index.mdx b/packages/docs/src/routes/docs/labs/insights/index.mdx
index 9c314ce1eba..4548cc9de62 100644
--- a/packages/docs/src/routes/docs/labs/insights/index.mdx
+++ b/packages/docs/src/routes/docs/labs/insights/index.mdx
@@ -52,7 +52,7 @@ export default component$(() => {
});
```
-You can get `PUBLIC_QWIK_INSIGHTS_KEY` by asking in the [Qwik Discord server](https://qwik.builder.io/chat).
+You can get `PUBLIC_QWIK_INSIGHTS_KEY` by visiting [Qwik Insight](https://qwik-insights.builder.io/app/add/).
The `` component collects this data:
- Timing information of symbols.
diff --git a/packages/docs/src/routes/tutorial/events/synchronous/solution/app.tsx b/packages/docs/src/routes/tutorial/events/synchronous/solution/app.tsx
index 4d95cbe80c4..939c26316cb 100644
--- a/packages/docs/src/routes/tutorial/events/synchronous/solution/app.tsx
+++ b/packages/docs/src/routes/tutorial/events/synchronous/solution/app.tsx
@@ -2,13 +2,13 @@ import { component$, useVisibleTask$, useSignal } from '@builder.io/qwik';
export default component$(() => {
const aHref = useSignal();
- useVisibleTask$(() => {
+ useVisibleTask$(({ cleanup }) => {
const handler = (event: Event) => {
event.preventDefault();
window.open('http://qwik.builder.io');
};
aHref.value!.addEventListener('click', handler);
- return () => aHref.value!.removeEventListener('click', handler);
+ cleanup(() => aHref.value!.removeEventListener('click', handler));
});
return (
diff --git a/packages/eslint-plugin-qwik/package.json b/packages/eslint-plugin-qwik/package.json
index 38322cc0e60..5255db5c9a5 100644
--- a/packages/eslint-plugin-qwik/package.json
+++ b/packages/eslint-plugin-qwik/package.json
@@ -1,7 +1,7 @@
{
"name": "eslint-plugin-qwik",
"description": "An Open-Source sub-framework designed with a focus on server-side-rendering, lazy-loading, and styling/animation.",
- "version": "1.2.17",
+ "version": "1.2.18",
"author": "Builder Team",
"bugs": "https://github.com/BuilderIO/qwik/issues",
"dependencies": {
diff --git a/packages/qwik-city/package.json b/packages/qwik-city/package.json
index b7b206a9e9a..dee970bbe7e 100644
--- a/packages/qwik-city/package.json
+++ b/packages/qwik-city/package.json
@@ -1,7 +1,7 @@
{
"name": "@builder.io/qwik-city",
"description": "The meta-framework for Qwik.",
- "version": "1.2.17",
+ "version": "1.2.18",
"bugs": "https://github.com/BuilderIO/qwik/issues",
"dependencies": {
"@mdx-js/mdx": "2.3.0",
diff --git a/packages/qwik/package.json b/packages/qwik/package.json
index cf5d21883f6..b224f011e8c 100644
--- a/packages/qwik/package.json
+++ b/packages/qwik/package.json
@@ -1,7 +1,7 @@
{
"name": "@builder.io/qwik",
"description": "An Open-Source sub-framework designed with a focus on server-side-rendering, lazy-loading, and styling/animation.",
- "version": "1.2.17",
+ "version": "1.2.18",
"bin": "./dist/qwik.cjs",
"bugs": "https://github.com/BuilderIO/qwik/issues",
"contributors": [
diff --git a/packages/qwik/src/cli/new/run-new-command.ts b/packages/qwik/src/cli/new/run-new-command.ts
index 50e97a630cf..99b29c1fa35 100644
--- a/packages/qwik/src/cli/new/run-new-command.ts
+++ b/packages/qwik/src/cli/new/run-new-command.ts
@@ -95,11 +95,7 @@ export async function runNewCommand(app: AppCommand) {
const fileOutput = await writeToFile(name, slug, template, outDir);
- if (typeArg === 'markdown') {
- log.success(`${green(`Markdown route "${name}" created!`)}`);
- } else {
- log.success(`${green(`${toPascal([typeArg])} "${name}" created!`)}`);
- }
+ log.success(`${green(`${toPascal([typeArg])} "${slug}" created!`)}`);
log.message(`Emitted in ${dim(fileOutput)}`);
} catch (e) {
log.error(String(e));
@@ -160,17 +156,19 @@ async function selectName(type: 'route' | 'component' | 'markdown' | 'mdx') {
bye();
}
- if (type === 'route' && !(nameAnswer as string).startsWith('/')) {
- return `/${nameAnswer as string}`;
- }
- if (type === 'markdown' && !(nameAnswer as string).startsWith('/')) {
- return `/${nameAnswer.replace(MARKDOWN_SUFFIX, '') as string}`;
+ let result = nameAnswer;
+
+ if (type !== 'component' && !nameAnswer.startsWith('/')) {
+ result = `/${result}`;
}
- if (type === 'mdx' && !(nameAnswer as string).startsWith('/')) {
- return `/${nameAnswer.replace(MDX_SUFFIX, '') as string}`;
+
+ if (type === 'markdown') {
+ result = result.replace(MARKDOWN_SUFFIX, '');
+ } else if (type === 'mdx') {
+ result = result.replace(MDX_SUFFIX, '');
}
- return nameAnswer.replace(MARKDOWN_SUFFIX, '') as string;
+ return result;
}
async function selectTemplate(typeArg: (typeof POSSIBLE_TYPES)[number]) {
@@ -251,9 +249,9 @@ function parseInputName(input: string) {
}
function toSlug(list: string[]) {
- return list.join('-').toLowerCase();
+ return list.join('-');
}
function toPascal(list: string[]) {
- return list.map((p) => p[0].toUpperCase() + p.substring(1).toLowerCase()).join('');
+ return list.map((p) => p[0].toUpperCase() + p.substring(1)).join('');
}
diff --git a/packages/qwik/src/core/api.md b/packages/qwik/src/core/api.md
index 8883396673f..52d1a1ea4e4 100644
--- a/packages/qwik/src/core/api.md
+++ b/packages/qwik/src/core/api.md
@@ -1532,15 +1532,17 @@ export namespace QwikJSX {
export interface QwikKeyboardEvent extends SyntheticEvent {
// (undocumented)
altKey: boolean;
- // (undocumented)
+ // @deprecated (undocumented)
charCode: number;
// (undocumented)
+ code: string;
+ // (undocumented)
ctrlKey: boolean;
getModifierState(key: string): boolean;
// (undocumented)
isComposing: boolean;
key: string;
- // (undocumented)
+ // @deprecated (undocumented)
keyCode: number;
// (undocumented)
locale: string;
@@ -1552,7 +1554,7 @@ export interface QwikKeyboardEvent extends SyntheticEvent {
const fixture = new ElementFixture();
@@ -1055,3 +1058,44 @@ export const CleanupComponent = component$((props: { spies: { cleanupSpy: boolea
);
});
+
+suite('should properly render styles from style prop', () => {
+ const RenderJSX = component$(() => {
+ const pStyles = {
+ fontSize: 30, // auto-converted to px
+ fontWeight: 800, // shouldn't get converted to px
+ };
+ return (
+
+
+
+ );
+ });
+
+ test('SSR jsx style render', async () => {
+ const output = await renderToString(, { containerTagName: 'div' });
+ const document = createDocument();
+ document.body.innerHTML = output.html;
+ const main = document.querySelector('#root')!;
+ const resultHTML = ``;
+ assert.equal(main.innerHTML, resultHTML);
+ });
+
+ test('CSR jsx style render', async () => {
+ const { screen, render } = await createDOM();
+
+ await render();
+ const main = screen.querySelector('#root')!;
+ const resultHTML = ``;
+ assert.equal(main.innerHTML, resultHTML);
+ });
+});
diff --git a/packages/qwik/src/core/render/execute-component.ts b/packages/qwik/src/core/render/execute-component.ts
index 5501baf73ac..0779fe4633f 100644
--- a/packages/qwik/src/core/render/execute-component.ts
+++ b/packages/qwik/src/core/render/execute-component.ts
@@ -15,6 +15,7 @@ import { handleError } from './error-handling';
import { HOST_FLAG_DIRTY, HOST_FLAG_MOUNTED, type QContext } from '../state/context';
import { isSignal, SignalUnassignedException } from '../state/signal';
import { isJSXNode } from './jsx/jsx-runtime';
+import { isUnitlessNumber } from '../util/unitless_number';
export interface ExecuteComponentOutput {
node: JSXNode | null;
@@ -164,8 +165,11 @@ export const stringifyStyle = (obj: any): string => {
if (Object.prototype.hasOwnProperty.call(obj, key)) {
const value = obj[key];
if (value != null) {
- const normalizedKey = key.startsWith('--') ? key : fromCamelToKebabCase(key);
- chunks.push(normalizedKey + ':' + value);
+ if (key.startsWith('--')) {
+ chunks.push(key + ':' + value);
+ } else {
+ chunks.push(fromCamelToKebabCase(key) + ':' + setValueForStyle(key, value));
+ }
}
}
}
@@ -175,6 +179,13 @@ export const stringifyStyle = (obj: any): string => {
return String(obj);
};
+const setValueForStyle = (styleName: string, value: any) => {
+ if (typeof value === 'number' && value !== 0 && !isUnitlessNumber(styleName)) {
+ return value + 'px';
+ }
+ return value;
+};
+
export const getNextIndex = (ctx: RenderContext) => {
return intToStr(ctx.$static$.$containerState$.$elementIndex$++);
};
diff --git a/packages/qwik/src/core/render/jsx/types/jsx-qwik-events.ts b/packages/qwik/src/core/render/jsx/types/jsx-qwik-events.ts
index e643b00bd89..4dbf86931fe 100644
--- a/packages/qwik/src/core/render/jsx/types/jsx-qwik-events.ts
+++ b/packages/qwik/src/core/render/jsx/types/jsx-qwik-events.ts
@@ -100,6 +100,7 @@ export interface QwikChangeEvent extends SyntheticEvent {
export interface QwikKeyboardEvent extends SyntheticEvent {
isComposing: boolean;
altKey: boolean;
+ /** @deprecated Deprecated. */
charCode: number;
ctrlKey: boolean;
/**
@@ -112,12 +113,15 @@ export interface QwikKeyboardEvent extends SyntheticEvent {
+ return unitlessNumbers.has(name);
+};
diff --git a/packages/qwik/src/optimizer/src/plugins/plugin.ts b/packages/qwik/src/optimizer/src/plugins/plugin.ts
index bfa48a6ce22..9f09e6b216c 100644
--- a/packages/qwik/src/optimizer/src/plugins/plugin.ts
+++ b/packages/qwik/src/optimizer/src/plugins/plugin.ts
@@ -1,5 +1,7 @@
-import { createOptimizer } from '../optimizer';
+import type { Rollup } from 'vite';
+import { hashCode } from '../../../core/util/hash_code';
import { generateManifestFromBundles, getValidManifest } from '../manifest';
+import { createOptimizer } from '../optimizer';
import type {
Diagnostic,
EntryStrategy,
@@ -17,8 +19,6 @@ import type {
TransformOutput,
} from '../types';
import { createLinter, type QwikLinter } from './eslint-plugin';
-import type { Rollup } from 'vite';
-import { hashCode } from '../../../core/util/hash_code';
const REG_CTX_NAME = ['server'];
@@ -445,10 +445,10 @@ export function createPlugin(optimizerOptions: OptimizerOptions = {}) {
const transformedOutput = isSSR
? ssrTransformedOutputs.get(importer)
: transformedOutputs.get(importer);
- const p = transformedOutput?.[0].origPath;
- if (p) {
+ const originalPath = transformedOutput?.[0].origPath || transformedOutput?.[1];
+ if (originalPath) {
// Resolve imports relative to original source path
- return ctx.resolve(id, p, { skipSelf: true });
+ return ctx.resolve(id, originalPath, { skipSelf: true });
}
return;
}
diff --git a/starters/features/bootstrap/src/routes/bootstrap/spinners/index.tsx b/starters/features/bootstrap/src/routes/bootstrap/spinners/index.tsx
index ef14c70c2dd..4b273b16589 100644
--- a/starters/features/bootstrap/src/routes/bootstrap/spinners/index.tsx
+++ b/starters/features/bootstrap/src/routes/bootstrap/spinners/index.tsx
@@ -14,6 +14,7 @@ export default component$(() => {
>