chore: clean up docs site build warnings (#5391)

This commit is contained in:
Miško Hevery
2023-11-02 15:51:47 -07:00
committed by GitHub
parent edb77a3702
commit 8bfd7dda38
28 changed files with 137 additions and 879 deletions

View File

@@ -8,9 +8,9 @@
"@algolia/autocomplete-core": "1.7.4",
"@algolia/client-search": "4.14.3",
"@builder.io/partytown": "^0.8.1",
"@builder.io/qwik": "github:BuilderIo/qwik-build#7521f8e9157e643e7948fa4ae99234e41b56cf95",
"@builder.io/qwik-city": "github:BuilderIo/qwik-city-build#bc4e963e1243fd2a6d74dcc5fe5d12fd69a8ac96",
"@builder.io/qwik-labs": "github:BuilderIo/qwik-labs-build#5f672e948330926b348cbac8692d9aba6f8f41b2",
"@builder.io/qwik": "github:BuilderIo/qwik-build#0080db89d43112fea2ed6b281f70f61d00f42edd",
"@builder.io/qwik-city": "github:BuilderIo/qwik-city-build#fd39ca1abf09e4016ff738679030b2486ea5f7fc",
"@builder.io/qwik-labs": "github:BuilderIo/qwik-labs-build#c336fbf3ac62af6b056b8f7b203a6c1d48756f91",
"@builder.io/qwik-react": "0.5.0",
"@builder.io/sdk-qwik": "^0.6.2",
"@docsearch/css": "^3.5.2",

View File

@@ -1,42 +0,0 @@
export interface Callout {
html: string;
nextToken?: string;
}
export const CALLOUTS: Record<string, Callout> = {
component$: {
nextToken: '(',
html: `Declares component in Qwik. The <code>$</code> suffix tells
Qwik Optimizer to pull out the component into a separate lazy-executed (lazy-loaded) symbol so
that the component only gets download to the client if it is needed for re-rendering.`,
},
routeLoader$: {
nextToken: '(',
html: `Creates a <code>use____()</code> method which loads data for the route.
the data loading runs on the server, but the data can be used on the client. The <code>$</code> allows the
client code to reffer to server function so that the type information can flow, without forcing the bundler
to bundle the server code on the client.`,
},
onInput$: {
html: `Listen to <code>input</code> events. The <code>$</code> allows the listener to be resumeb
on the client. The listener is eagerly loaded in browser chache, but is broght into the application only when
event happens.`,
},
server$: {
nextToken: `(`,
html: `Invoke the function on the server. (Similar to RPC.)`,
},
};
export function getCallout(
hoverText: string | null | undefined,
nextText: string | null | undefined
): Callout | null {
if (hoverText) {
const callout = CALLOUTS[hoverText];
if (callout && callout.nextToken && callout.nextToken !== nextText) {
return null;
}
return callout;
}
return null;
}

View File

@@ -1,9 +0,0 @@
export const getTasksFromDB = () => {
return null! as Task[];
};
export const hasText = (task: Task, text: string) => true;
export interface Task {
id: string;
completed: boolean;
title: string;
}

View File

@@ -1,40 +0,0 @@
img {
max-height: 500px;
width: 400px;
height: 400px;
}
main {
display: flex;
flex-direction: column;
}
section.row {
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
padding: 0 1rem;
}
.tagline,
.sub-tagline {
margin: 10px;
font-weight: bold;
}
.sub-tagline {
font-weight: normal;
}
p.box {
padding: 1rem;
margin: 1rem;
border: 1px solid #ccc;
border-radius: 5px;
max-width: 600px;
}
p a {
text-decoration: underline;
}

View File

@@ -1,108 +0,0 @@
import { component$, useStylesScoped$ } from '@builder.io/qwik';
import STYLES from './index.css?inline';
import { SrcAnimation } from './src-animation';
export default component$(() => {
useStylesScoped$(STYLES);
return (
<main>
<section class="row">
<section class="left">
<p class="tagline">
The next-generation framework that streams your JS app, no matter how large it is.
</p>
<p class="sub-tagline">
(instantly load any scale of the app with no extra development effort)
</p>
</section>
<section class="right">
<img src="https://cdn.builder.io/api/v1/image/assets%2Ffe30f73e01ef40558cd69a9493eba2a2%2Fc65b2edb5e354db98e7a62e18eb44543?width=2000&format=webp" />
</section>
</section>
<section class="row">
<section class="left">
<img src="https://cdn.builder.io/api/v1/image/assets%2Ffe30f73e01ef40558cd69a9493eba2a2%2Fc65b2edb5e354db98e7a62e18eb44543?width=2000&format=webp" />
</section>
<section class="right">
<p class="box">
Too much JavaScript is the most significant performance problem on the web today. It
prevents your site from getting good CWV / PageSpeed scores resulting in a frustrating
experience for your users and{' '}
<a href="https://web.dev/tags/case-study/">forgone revenue</a> for you. Qwiks{' '}
<a href="/docs/concepts/resumable/">resumability</a> keeps the amount of JavaScript
small and constant even as your application grows in complexity.
</p>
<p class="box">
Universal execution model seamlessly blends execution of code on the server and client
in a DX so clean you don't even have to think about it. Powered by{' '}
<a href="https://www.builder.io/blog/wtf-is-code-extraction">Code Extraction</a>, which
breaks your application code into small code chunks and delivers them to the correct
runtime environment enabling the streaming of JavaScript without any developer effort.
</p>
<p class="box">
<a href="/docs/advanced/speculative-module-fetching/">Speculative Module Fetching</a>{' '}
ensures the code is loaded before user interaction to ensure instant interactivity, even
on slow or intermittent networks. Collect real-world user behavior to further optimize
the javascript bundles and speculative module fetching.
</p>
<p class="box">
Qwik is designed so that the easy path for the developer is the performant path for the
user—no need to know special performance hacks or learn new APIs to optimize the site
performance. Even your junior developer can create performant sites.
</p>
</section>
</section>
<section class="row">
<div style="width: 650px">
<h1 style="height: 100px">Some Text</h1>
<h1 style="height: 100px">Some Text</h1>
<h1 style="height: 100px">Some Text</h1>
<h1 style="height: 100px">Some Text</h1>
<h1 style="height: 100px">Some Text</h1>
<h1 style="height: 100px">Some Text</h1>
<h1 style="height: 100px">Some Text</h1>
<h1 style="height: 100px">Some Text</h1>
<h1 style="height: 100px">Some Text</h1>
<SrcAnimation />
</div>
</section>
<section class="row">
<section class="left">
<img src="https://cdn.builder.io/api/v1/image/assets%2Ffe30f73e01ef40558cd69a9493eba2a2%2Fc65b2edb5e354db98e7a62e18eb44543?width=2000&format=webp" />
</section>
<section class="right">
<p class="box">
Qwik goes beyond other meta-frameworks to solve the whole web application creation,
optimization, and delivery out of the box.
</p>
<p class="box">
SEO-first: SEO is not an afterthought but a fundamental property of Qwik. Turn off
JavaScript and navigate this site to see what SEO will see.
</p>
<p class="box">
Edge-Enabled: Get even better performance by running your application on edge close to
your users. Check out our <a href="/ecosystem/">integrations page</a>.
</p>
<p class="box">
SSR/SSG: Server-Side-Rendering? Static-Site-Generation? A mixture of both? Yes, Qwik
does it all in a way that works well with your CDN.
</p>
<p class="box">
Bundling: Be the master of code-splitting and lazy-loading without writing a single
dynamic import or refactoring your application. Learn from real-world user behavior and
adjust the bundles by changing configuration parameters.
</p>
<p class="box">
Integrate your existing React components in Qwik with{' '}
<a href="/integrations/react/">Qwik-React</a>. Lazy load and hydrate the React
components for improved startup performance.
</p>
<p class="box">
Reach a <a href="/chat/">community of developers</a> ready to answer your questions on
Discord.
</p>
</section>
</section>
</main>
);
});

View File

@@ -1,83 +0,0 @@
const PATH: StyleFrame[] = [
{
pos: 0,
rotateX: 0,
rotateY: 0,
rotateZ: 0,
translateX: 0,
translateY: 0,
translateZ: 0,
marginLeft: 0,
marginTop: 0,
opacity: 0,
layerAlpha: 0,
},
{
pos: 0.5,
rotateX: 0,
rotateY: 0,
rotateZ: 0,
translateX: 0,
translateY: 0,
translateZ: 0,
marginLeft: 0,
marginTop: 0,
opacity: 0,
layerAlpha: 0.2,
},
{
pos: 1,
rotateX: 0,
rotateY: 50,
rotateZ: 0,
translateX: 0,
translateY: 0,
translateZ: 0,
marginLeft: 420,
marginTop: 0,
opacity: 1,
layerAlpha: 0,
},
];
export interface StyleFrame {
pos: number;
rotateX: number;
rotateY: number;
rotateZ: number;
translateX: number;
translateY: number;
translateZ: number;
marginLeft: number;
marginTop: number;
opacity: number;
layerAlpha: number;
}
export function setPosition(pos: number) {
const prev = findPos(pos, 0);
const next = findPos(pos, 1);
return interpolate(pos, prev, next);
}
function findPos(pos: number, offset: number) {
let lastPos = 0;
for (let i = 0; i < PATH.length; i++) {
if (PATH[i].pos <= pos) {
lastPos = i;
}
}
return PATH[lastPos + offset] || PATH[PATH.length - 1];
}
function interpolate(pos: number, prev: StyleFrame, next: StyleFrame) {
if (prev.pos === next.pos) {
return next;
}
const percent = (pos - prev.pos) / (next.pos - prev.pos);
const values: StyleFrame = {} as any;
(Object.keys(prev) as Array<keyof StyleFrame>).forEach((k) => {
values[k] = prev[k] * (1 - percent) + next[k] * percent;
});
return values;
}

View File

@@ -1,149 +0,0 @@
.sticky {
position: sticky;
bottom: 100px;
z-index: 1;
width: 100%;
background-color: black;
}
ul.layers {
display: block;
margin: 0;
padding: 0;
}
li.layer {
display: block;
position: absolute;
top: 0;
margin: 0;
transform-style: preserve-3d;
width: 630px;
perspective: 5000px;
font-weight: 500;
}
li.layer.layer-0 {
position: static;
}
li.layer > div {
padding: 1em;
}
li.layer-0 > div {
/*background-color: rgb(29, 166, 243, var(--opacity));*/
background-color: rgb(15, 83, 172, var(--opacity));
}
li.layer-1 > div {
/*background-color: rgb(220, 220, 220, var(--opacity));*/
background-color: rgb(110, 110, 110, var(--opacity));
}
li.layer-2 > div {
/*background-color: rgb(155, 99, 241, var(--opacity));*/
background-color: rgb(78, 50, 120, var(--opacity));
}
li.layer-0 span.layer-0 {
background-color: rgb(29, 166, 243, var(--layer-alpha));
}
li.layer-1 span.layer-1 {
background-color: rgb(255, 255, 255, var(--layer-alpha));
}
li.layer-2 span.layer-2 {
background-color: rgb(155, 99, 241, var(--layer-alpha));
}
#srcOut,
li.layer {
white-space: pre;
}
.code {
font-family: 'Courier New', Courier, monospace;
font-weight: 900;
}
.code-keyword {
color: rgb(29, 166, 243);
}
.code-brace {
color: rgb(254, 209, 11);
}
.code-ident {
color: rgb(141, 211, 254);
}
.code-misc {
color: rgb(202, 202, 202);
}
.code-decl {
color: rgb(70, 137, 204);
}
.code-string {
color: rgb(194, 127, 101);
}
.code-invocation {
color: rgb(212, 214, 153);
}
.code-type {
color: rgb(67, 191, 161);
}
.code-JSX-element {
color: rgb(70, 137, 204);
}
.code-JSX-brace {
color: rgb(109, 109, 109);
}
.code-JSX-component {
color: rgb(66, 187, 157);
}
.code-JSX-attr {
color: rgb(141, 211, 254);
}
.code-transparent {
color: rgb(0, 0, 0, 0);
}
.callout {
margin-top: 10px;
width: 300px;
padding: 1em;
background-color: darkgrey;
border-radius: 5px;
border: 1px solid black;
}
.callout:before {
content: '';
position: absolute;
width: 0;
height: 0;
left: 23px;
top: -26px;
border: 10px solid transparent;
border-bottom: 16px solid black; /* IE8 Fallback */
border-bottom: 16px solid black;
z-index: 2;
}
.callout:after {
content: '';
position: absolute;
width: 0;
height: 0;
left: 25px;
top: -22px;
border: 8px solid transparent;
border-bottom: 14px solid darkgrey;
z-index: 3;
}

View File

@@ -1,179 +0,0 @@
import {
component$,
useSignal,
$,
useComputed$,
useStore,
useTask$,
useStyles$,
useOnDocument,
type QwikMouseEvent,
} from '@builder.io/qwik';
import { isBrowser } from '@builder.io/qwik/build';
import { type Callout, getCallout } from './callout';
import { setPosition } from './layers';
import { srcLayer0, srcLayer1, srcLayer2 } from './syntax';
import STYLES from './src-animation.css?inline';
export const SrcAnimation = component$(() => {
useStyles$(STYLES);
const stickyDiv = useSignal<HTMLDivElement>();
const calloutStyles = useSignal<Record<string, any>>({ display: 'none' });
const hoverToken = useStore<{
element: HTMLSpanElement | null;
callout: Callout | null;
}>({
element: null,
callout: null,
});
const position = useSignal(0);
const inter = useComputed$(() => {
return setPosition(position.value);
});
const transform2 = useComputed$(() =>
[
`rotateX(${inter.value.rotateX}deg)`,
`rotateY(${inter.value.rotateY}deg)`,
`rotateZ(${inter.value.rotateZ}deg)`,
`translateX(${inter.value.translateX}px)`,
`translateY(${inter.value.translateY}px)`,
`translateZ(${inter.value.translateZ}px)`,
].join(' ')
);
const transform1 = useComputed$(() =>
[
`rotateX(${inter.value.rotateX}deg)`,
`rotateY(${inter.value.rotateY}deg)`,
`rotateZ(${inter.value.rotateZ}deg)`,
].join(' ')
);
const transform0 = useComputed$(() =>
[
`rotateX(${inter.value.rotateX}deg)`,
`rotateY(${inter.value.rotateY}deg)`,
`rotateZ(${inter.value.rotateZ}deg)`,
`translateX(${-inter.value.translateX}px)`,
`translateY(${-inter.value.translateY}px)`,
`translateZ(${-inter.value.translateZ}px)`,
].join(' ')
);
useTask$(({ track }) => {
track(hoverToken);
if (!isBrowser) {
return;
}
if (hoverToken.callout) {
const rect = hoverToken.element!.getBoundingClientRect();
const top = rect.bottom + window.scrollY;
const left = rect.left + window.scrollX;
calloutStyles.value = {
display: 'block',
position: 'absolute',
top: top + 'px',
left: left + 'px',
zIndex: '2',
};
} else {
calloutStyles.value = {
display: 'none',
};
}
});
useOnDocument(
'scroll',
$((e) => {
const stickyParent = stickyDiv.value!.parentElement!;
const rectParent = stickyParent.getBoundingClientRect();
const rectSticky = stickyDiv.value!.getBoundingClientRect();
const scrollY = window.scrollY;
const height = rectParent.height - rectSticky.height;
const start = scrollY + rectParent.top;
// const end = start + height;
const pos = Math.max(0, Math.min(1, (scrollY - start) / height));
position.value = pos;
hoverToken.element = null;
hoverToken.callout = null;
})
);
return (
<>
<div class="sticky" ref={stickyDiv}>
<ul
class="layers"
style={{
'--layer-alpha': inter.value.layerAlpha,
'--opacity': inter.value.opacity,
}}
onMouseMove$={(e) => {
const spans = stickyDiv.value!.querySelectorAll('span.callout-anchor')!;
let found = false;
for (let i = 0; i < spans.length; i++) {
const span = spans[i] as HTMLSpanElement;
const rect = span.getBoundingClientRect();
if (inside(e, rect)) {
found = true;
hoverToken.element = span;
const hoverText = span.textContent;
const nextText = span.nextSibling?.textContent;
hoverToken.callout = getCallout(hoverText, nextText);
}
}
if (!found) {
hoverToken.element = null;
hoverToken.callout = null;
}
}}
>
<li
class="layer layer-0"
style={{
marginLeft: -1 * inter.value.marginLeft + 'px',
marginTop: -1 * inter.value.marginTop + 'px',
}}
>
<div
dangerouslySetInnerHTML={srcLayer0}
style={{
transform: transform2.value,
}}
/>
</li>
<li class="layer layer-1">
<div
style={{
transform: transform1.value,
}}
dangerouslySetInnerHTML={srcLayer1}
/>
</li>
<li
class="layer layer-2"
style={{
marginLeft: 1 * inter.value.marginLeft + 'px',
marginTop: 1 * inter.value.marginTop + 'px',
}}
>
<div
style={{
transform: transform0.value,
}}
dangerouslySetInnerHTML={srcLayer2}
/>
</li>
</ul>
</div>
<div
class="callout"
style={calloutStyles.value}
dangerouslySetInnerHTML={hoverToken.callout?.html}
/>
</>
);
});
function inside(pos: QwikMouseEvent, rect: DOMRect) {
const { x, y } = pos;
const { left, right, top, bottom } = rect;
return left < x && x < right && top < y && y < bottom;
}

View File

@@ -1,187 +0,0 @@
import { getCallout } from './callout';
export function toHTML(tokens: Token[], layer: number) {
const HTML: string[] = [];
tokens.forEach((token, idx) => {
const callout = token.layer == layer && getCallout(token.text, tokens[idx + 1]?.text);
const classes = [
'layer-' + token.layer,
token.layer === layer ? 'code-' + token.type : 'code-transparent',
];
if (callout) {
classes.push('callout-anchor');
}
HTML.push(`<span class="${classes.join(' ')}">${token.text.replace('<', '&lt;')}</span>`);
// if (callout) {
// HTML.push('<div class="callout">', callout.html, '</div>');
// }
});
return HTML.join('');
}
export interface Token {
type: string;
from: number;
to: number;
text: string;
layer: number;
}
function tokenize(text: string) {
let layer = 0;
const stack: Token[] = [];
let i = 0;
let lastI = i;
const tokens: Token[] = [];
while (i < text.length) {
const ch = text[i++];
const peekCh = text[i];
if (ch == '"') {
consume('string', (ch) => ch !== '"', true);
} else if (ch == "'") {
consume('string', (ch) => ch !== "'", true);
} else if (isWhitespace(ch)) {
consume('whitespace', isWhitespace);
} else if (isIdent(ch)) {
consume('ident', isIdent);
} else if (ch === '<' && (isIdent(peekCh) || peekCh == '/' || peekCh == '>')) {
consume('JSX-brace', () => false);
} else if (ch == '=' && peekCh == '>') {
consume('decl', (ch) => ch === '>', true);
} else if (isOpenBrace(ch)) {
consume('brace', () => false);
} else if (isCloseBrace(ch)) {
consume('brace', () => false);
} else {
consume('misc', () => false);
}
}
return tokens;
function consume(type: string, predicate: (ch: string) => boolean, inclusive?: boolean) {
while (i < text.length) {
const ch = text[i];
if (!predicate(ch)) {
if (inclusive) {
i++;
}
break;
}
i++;
}
push(type);
}
function push(type: string) {
const tokenText = text.substring(lastI, i);
if (type == 'ident') {
const inType = stack[stack.length - 1]?.type;
if (inType !== 'JSX-brace' && (after(':') || after('as'))) {
type = 'type';
} else if (text[i] == '(') {
type = 'invocation';
} else {
if (inType == 'JSX-brace') {
type = isUpperCase(tokenText[0]) ? 'JSX-component' : 'JSX-element';
}
}
}
if (isCloseBrace(tokenText)) {
const matchToken = stack.pop()!;
layer = matchToken.layer;
type = matchToken.type;
}
const token = {
type: KEYWORDS[tokenText] || type,
from: lastI,
to: i,
text: tokenText,
layer: layer,
};
if (isOpenBrace(tokenText)) {
const prevToken = tokens[tokens.length - 1];
const prevPrevToken = tokens[tokens.length - 2];
if (tokenText === '(' && prevToken?.text?.endsWith('$')) {
layer = LAYERS[prevToken.text] || 0;
} else if (tokenText == '{' && prevToken?.text === '=' && prevPrevToken?.text.endsWith('$')) {
layer = 2;
}
stack.push(token);
}
tokens.push(token);
lastI = i;
//console.log(tokens[tokens.length - 1]);
}
function after(text: string) {
for (let i = tokens.length - 1; i >= 0; i--) {
const token = tokens[i];
if (token.type === 'whitespace') {
continue;
}
return token.text == text;
}
return false;
}
}
function isWhitespace(ch: string) {
return ch == ' ' || ch == '\n';
}
function isOpenBrace(ch: string) {
return ch == '{' || ch == '(' || ch == '[' || ch == '<';
}
function isCloseBrace(ch: string) {
return ch == '}' || ch == ')' || ch == ']' || ch == '>';
}
function isUpperCase(ch: string) {
return 'A' <= ch && ch <= 'Z';
}
function isLowerCase(ch: string) {
return 'a' <= ch && ch <= 'z';
}
function isIdent(ch: string) {
return isLowerCase(ch) || isUpperCase(ch) || ch === '_' || ch === '$';
}
const KEYWORDS: Record<string, string> = {};
'import|function|default|return|export|as|await|async'
.split('|')
.forEach((key) => (KEYWORDS[key] = 'keyword'));
'const|let|var'.split('|').forEach((key) => (KEYWORDS[key] = 'decl'));
const LAYERS: Record<string, number> = {
routeLoader$: 0,
routeAction$: 0,
component$: 1,
server$: 0,
};
const SRC = `import { component$ } from "@builder.io/qwik";
import { Form, routeAction$, routeLoader$ } from "@builder.io/qwik-city";
const useDice = routeLoader$(() => Math.round(Math.random() * 6) + 1);
const useBetAction = routeAction$((params) => {
console.log(params.up ? "UP" : params.down ? "DOWN" : "???");
});
export default component$(() => {
const dice = useDice();
const betAction = useBetAction();
return (
<>
<span>Roll: {dice}</span>
<Form action={betAction}>
<button name="up">👍</button>
<button name="down">👎</button>
</Form>
</>
);
});
`;
const tokens = tokenize(SRC);
export const srcLayer0 = toHTML(tokens, 0);
export const srcLayer1 = toHTML(tokens, 1);
export const srcLayer2 = toHTML(tokens, 2);

View File

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@@ -122,7 +122,9 @@ export const ReplOutputPanel = ({ input, store }: ReplOutputPanelProps) => {
{diagnosticsLen === 0 ? (
<p class="no-diagnostics">- No Reported Diagnostics -</p>
) : (
[...store.diagnostics, ...store.monacoDiagnostics].map((d) => <p>{d.message}</p>)
[...store.diagnostics, ...store.monacoDiagnostics].map((d, key) => (
<p key={key}>{d.message}</p>
))
)}
</div>
) : null}

View File

@@ -128,12 +128,16 @@
"title": "@modular-forms/qwik",
"github": "https://modularforms.dev/qwik/guides/introduction",
"imgSrc": "/ecosystem/modular-forms.svg",
"width": 90,
"height": 90,
"description": "The modular and type-safe form library"
},
{
"title": "@qwikest/icons",
"github": "https://github.com/qwikest/icons",
"imgSrc": "/ecosystem/rocket.svg",
"width": 90,
"height": 90,
"description": "Thousand of Open Source icons"
},
{
@@ -146,48 +150,64 @@
"title": "qwik-rive",
"github": "https://github.com/qwikverse/qwik-rive",
"imgSrc": "/ecosystem/rive.png",
"width": 90,
"height": 90,
"description": "Rive animations"
},
{
"title": "qwik-lottie",
"github": "https://github.com/qwikverse/qwik-lottie",
"imgSrc": "/ecosystem/lottie.png",
"width": 90,
"height": 90,
"description": "Lottie animations"
},
{
"title": "@papanasi/qwik",
"github": "https://github.com/CKGrafico/papanasi",
"imgSrc": "/ecosystem/papanasi.svg",
"width": 90,
"height": 90,
"description": "Cross platform UI library"
},
{
"title": "qwik-wrap-balancer",
"github": "https://github.com/harshmangalam/qwik-wrap-balancer",
"imgSrc": "/ecosystem/balance.svg",
"width": 90,
"height": 90,
"description": "Good looking balanced paragraphs"
},
{
"title": "@qwik-ui/headless",
"github": "https://github.com/qwikifiers/qwik-ui",
"imgSrc": "/ecosystem/qwik-ui.png",
"width": 231,
"height": 90,
"description": "Headless UI library"
},
{
"title": "@qwikbits/headless-ui",
"github": "https://github.com/genie-design/qwikbits",
"imgSrc": "/ecosystem/qwikbits.svg",
"width": 90,
"height": 90,
"description": "Headless UI components and other helpers"
},
{
"title": "qwik-spin-delay",
"github": "https://github.com/harshmangalam/qwik-spin-delay",
"imgSrc": "/ecosystem/qwik-spin-delay.png",
"width": 90,
"height": 90,
"description": "Smart spinner component for Qwik, to manage the duration of loading states."
},
{
"title": "qwik-image",
"github": "https://github.com/qwikifiers/qwik-image",
"imgSrc": "/ecosystem/qwik-image-logo.png",
"width": 90,
"height": 90,
"description": "Performant images with automatic optimization."
}
],

View File

@@ -1,13 +1,14 @@
import { component$, useStyles$, type FunctionComponent } from '@builder.io/qwik';
import type { DocumentHead } from '@builder.io/qwik-city';
import { Link } from '@builder.io/qwik-city';
import ImgQwikNewsletter from '~/media/ecosystem/qwik-newsletter.svg?jsx';
import styles from '../ecosystem.css?inline';
import data from '../ecosystem.json';
import { MEDIA, type MediaEntry } from '../media/index';
import SHOWCASE from '../showcase/generated-pages.json';
import { EcosystemMenu } from './ecosystem-menu';
import { QwikPlusLogo } from './qwik-plus-logo';
import { MobileEcosystemMenu } from './mobile-ecosystem-menu';
import { QwikPlusLogo } from './qwik-plus-logo';
export default component$(() => {
useStyles$(styles);
@@ -92,6 +93,8 @@ export default component$(() => {
title={item.title}
href={item.github}
imgSrc={item.imgSrc}
width={item.width || 90}
height={item.height || 90}
description={item.description}
key={i}
thumbnailBg={true}
@@ -109,11 +112,7 @@ export default component$(() => {
class="flex justify-center p-4 w-full bg-[--qwik-dark-purple]
bg-gradient-to-r from-[--qwik-dark-purple-bg] via-purple-500 to-[--qwik-dark-purple-bg]"
>
<img
src="/ecosystem/qwik-newsletter.svg"
alt="Qwikly Newsletter - Weekly news about Qwik"
loading="lazy"
/>
<ImgQwikNewsletter />
</div>
<div class="text-2xl font-bold">Qwikly Newsletter - Weekly news about Qwik</div>
</div>
@@ -328,7 +327,13 @@ export const LibraryGridItem: FunctionComponent<LibraryGridItemProps> = (props)
<li class="grid-item">
<Link href={props.href}>
<div class={{ thumbnail: props.thumbnailBg, cover: props.imgCover }}>
<img src={props.imgSrc} alt={props.title} loading="lazy" />
<img
src={props.imgSrc}
alt={props.title}
width={props.width || 90}
height={props.height || 90}
loading="lazy"
/>
</div>
<div class="text">{props.title}</div>
<div class="description">{props.description}</div>
@@ -365,6 +370,8 @@ interface LibraryGridItemProps {
href: string;
description: string;
imgSrc?: string;
width?: number;
height?: number;
imgCover?: boolean;
thumbnailBg: boolean;
}

View File

@@ -505,6 +505,8 @@ export const MEDIA = mediaObj({
export interface MediaEntry {
title: string;
href: string;
width?: number;
height?: number;
author?: string;
language?: string;
imgSrc?: string;
@@ -519,6 +521,8 @@ export const ThumbnailLink = component$((props: { entry: MediaEntry; imgLoading?
<div class="relative">
<img
src={props.entry.imgSrc ? props.entry.imgSrc : '/ecosystem/qwik-blog-fallback.png'}
width={props.entry.width || 360}
height={props.entry.height || 200}
loading={props.imgLoading === 'eager' ? undefined : 'lazy'}
decoding={props.imgLoading === 'eager' ? undefined : 'async'}
class="thumbnail"
@@ -533,6 +537,8 @@ export const ThumbnailLink = component$((props: { entry: MediaEntry; imgLoading?
<div class="flex gap-2">
<img
src={`https://t0.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://${itemURL.host}&size=128`}
width={128}
height={128}
alt={`${itemURL.host.split('.').at(1)} logo`}
class="icon"
/>
@@ -572,15 +578,15 @@ export const Section = component$(
</h2>
<ul class={props.listStyle}>
{MEDIA[props.id].map((entry) => {
{MEDIA[props.id].map((entry, key) => {
if (entry.language && entry.language !== 'en') {
entriesInOtherLanguages.push(entry);
return null;
}
if (props.listStyle === 'thumbnails') {
return <ThumbnailLink entry={entry} imgLoading={props.imgLoading} />;
return <ThumbnailLink key={key} entry={entry} imgLoading={props.imgLoading} />;
}
return <BulletLink entry={entry} />;
return <BulletLink key={key} entry={entry} />;
})}
</ul>
@@ -588,11 +594,11 @@ export const Section = component$(
<>
<h3>Other languages</h3>
<ul class={props.listStyle}>
{entriesInOtherLanguages.map((entry) =>
{entriesInOtherLanguages.map((entry, key) =>
props.listStyle === 'thumbnails' ? (
<ThumbnailLink entry={entry} imgLoading={props.imgLoading} />
<ThumbnailLink key={key} entry={entry} imgLoading={props.imgLoading} />
) : (
<BulletLink entry={entry} />
<BulletLink key={key} entry={entry} />
)
)}
</ul>

View File

@@ -18,7 +18,7 @@ export const onRequest: RequestHandler = async (request) => {
request.cacheControl(600);
};
const useProductsLoader = routeLoader$(async () => {
export const useProductsLoader = routeLoader$(async () => {
const response = await fetchFromShopify(productsQuery());
const {
data: { node },
@@ -26,7 +26,7 @@ const useProductsLoader = routeLoader$(async () => {
return mapProducts(node.products.edges);
});
const useCartLoader = routeLoader$(async ({ cookie }) => {
export const useCartLoader = routeLoader$(async ({ cookie }) => {
const cartId = cookie.get(COOKIE_CART_ID_KEY)?.value;
const body = cartId ? checkoutQuery(cartId) : checkoutCreateMutation();
const response = await fetchFromShopify(body);

View File

@@ -16,8 +16,8 @@ export default component$(() => {
<div class="purple-gradient" role="presentation" />
<div class="blue-gradient" role="presentation" />
<div class="flex flex-wrap gap-9 justify-center max-w-[1200px] mb-20 mx-auto">
{(appShop.products || []).map((product) => (
<ShopProduct product={product} />
{(appShop.products || []).map((product, key) => (
<ShopProduct key={key} product={product} />
))}
</div>
</article>

View File

@@ -41,7 +41,7 @@ interface Portal {
name: string;
jsx: JSXNode;
close: QRL<() => void>;
contexts: Array<ContextPair<unknown>>;
contexts: Array<ContextPair<any>>;
}
export const PortalProvider = component$(() => {
@@ -84,8 +84,8 @@ export const Portal = component$<{ name: string }>(({ name }) => {
const myPortals = portals.value.filter((portal) => portal.name === name);
return (
<>
{myPortals.map((portal) => (
<div data-portal={name}>
{myPortals.map((portal, key) => (
<div key={key} data-portal={name}>
<WrapJsxInContext jsx={portal.jsx} contexts={portal.contexts} />
</div>
))}
@@ -97,7 +97,10 @@ export const WrapJsxInContext = component$<{
jsx: JSXNode;
contexts: Array<ContextPair<any>>;
}>(({ jsx, contexts }) => {
contexts.forEach(({ id, value }) => useContextProvider(id, value));
contexts.forEach(({ id, value }) => {
// eslint-disable-next-line
useContextProvider(id, value);
});
return (
<>
{/* Workaround: https://github.com/BuilderIO/qwik/issues/4966 */}

View File

@@ -1,6 +1,6 @@
// @ts-nocheck
/* eslint-disable @typescript-eslint/no-unused-vars */
import { $, component$ } from '@builder.io/qwik';
import { $, component$, type QRL } from '@builder.io/qwik';
import { routeLoader$ } from '@builder.io/qwik-city';
import type { InitialValues, SubmitHandler } from '@modular-forms/qwik';
import { formAction$, useForm, valiForm$ } from '@modular-forms/qwik';
@@ -35,7 +35,7 @@ export default component$(() => {
validate: valiForm$(LoginSchema),
});
const handleSubmit: SubmitHandler<LoginForm> = $((values, event) => {
const handleSubmit: QRL<SubmitHandler<LoginForm>> = $((values, event) => {
// Runs on client
console.log(values);
});

View File

@@ -1,16 +1,18 @@
import {
type JSXNode,
Slot,
component$,
noSerialize,
useContext,
useStore,
type JSXNode,
type NoSerialize,
} from '@builder.io/qwik';
import { UnderstandingResumability } from './component';
import {
PortalProvider,
Portal,
PortalAPI,
PortalProvider,
} from '../cookbook/portal/portal-provider';
import { UnderstandingResumability } from './component';
export default component$(() => {
return (
@@ -31,7 +33,7 @@ export const HoverProvider = component$(() => {
x: 0,
y: 0,
currentTarget: null as null | HTMLElement,
close: null as null | (() => void),
close: null as null | NoSerialize<() => void>,
});
return (
<div
@@ -47,7 +49,7 @@ export const HoverProvider = component$(() => {
detail: async (jsx: JSXNode) => {
if (state.close) return;
state.currentTarget = e.target as HTMLElement;
state.close = await portal('popup', jsx);
state.close = noSerialize(await portal('popup', jsx));
},
})
);

View File

@@ -29,8 +29,8 @@ export default component$(() => {
Add to list
</button>
<ul>
{store.list.map((item) => (
<li>{item}</li>
{store.list.map((item, key) => (
<li key={key}>{item}</li>
))}
</ul>
</>

View File

@@ -1,22 +1,16 @@
import { component$ } from '@builder.io/qwik';
import { type DocumentHead, useLocation } from '@builder.io/qwik-city';
import { type DocumentHead } from '@builder.io/qwik-city';
import BuilderContentComp from '../components/builder-content';
import { Footer } from '../components/footer/footer';
import { Header } from '../components/header/header';
import HomePageV2 from '../components/home-page-v2';
import { QWIK_MODEL, QWIK_PUBLIC_API_KEY } from '../constants';
export default component$(() => {
const showNewDesign = useLocation().url.searchParams.get('render') === 'v2';
return (
<>
<Header />
<main>
{showNewDesign ? (
<HomePageV2 />
) : (
<BuilderContentComp apiKey={QWIK_PUBLIC_API_KEY} model={QWIK_MODEL} tag="main" />
)}
<BuilderContentComp apiKey={QWIK_PUBLIC_API_KEY} model={QWIK_MODEL} tag="main" />
</main>
<div class="px-4">
<Footer />

View File

@@ -91,6 +91,7 @@ export default component$(() => {
<tbody>
{queryData.results.data.map((result: any, i: any) => (
<tr
key={i}
class={{
'border-spacing-5': true,
'bg-green-400': result.included,
@@ -111,8 +112,9 @@ export default component$(() => {
<h2>Similar queries</h2>
<table class="text-xs table-auto border-collapse border border-slate-500">
<tbody>
{queryData.similar.map((result: any) => (
{queryData.similar.map((result: any, key: string) => (
<tr
key={key}
class={{
'border-spacing-5': true,
'bg-red-400': result.rate < 0,

View File

@@ -31,6 +31,7 @@ export default component$(() => {
<tbody>
{queryData.results.data?.map((result: any, i: any) => (
<tr
key={i}
class={{
'bg-red-400': result.rate < 0,
'bg-green-400': result.rate > 0,

View File

@@ -22,8 +22,8 @@ export const TutorialContentHeader = component$(({ store }: TutorialContentHeade
}
}}
>
{tutorialSections.map((s) => (
<optgroup label={s.title}>
{(tutorialSections as Tutorial[]).map((s, key) => (
<optgroup key={key} label={s.title}>
{s.apps.map((t) => (
<option selected={t.id === store.appId} value={t.id} key={t.id}>
{t.title}
@@ -38,6 +38,11 @@ export const TutorialContentHeader = component$(({ store }: TutorialContentHeade
);
});
interface Tutorial {
title: string;
apps: { id: string; title: string }[];
}
interface TutorialContentHeaderProps {
store: TutorialStore;
}

View File

@@ -14,8 +14,8 @@
"install": "^0.13.0"
},
"devDependencies": {
"@builder.io/qwik": "github:BuilderIo/qwik-build#7521f8e9157e643e7948fa4ae99234e41b56cf95",
"@builder.io/qwik-city": "github:BuilderIo/qwik-city-build#bc4e963e1243fd2a6d74dcc5fe5d12fd69a8ac96",
"@builder.io/qwik": "github:BuilderIo/qwik-build#0080db89d43112fea2ed6b281f70f61d00f42edd",
"@builder.io/qwik-city": "github:BuilderIo/qwik-city-build#fd39ca1abf09e4016ff738679030b2486ea5f7fc",
"@builder.io/qwik-labs": "workspace:*",
"@builder.io/vite-plugin-macro": "~0.0.7",
"@netlify/edge-functions": "^2.2.0",

68
pnpm-lock.yaml generated
View File

@@ -220,14 +220,14 @@ importers:
specifier: ^0.8.1
version: 0.8.1
'@builder.io/qwik':
specifier: github:BuilderIo/qwik-build#7521f8e9157e643e7948fa4ae99234e41b56cf95
version: github.com/BuilderIo/qwik-build/7521f8e9157e643e7948fa4ae99234e41b56cf95(@types/node@20.8.4)(terser@5.21.0)(undici@5.26.0)
specifier: github:BuilderIo/qwik-build#0080db89d43112fea2ed6b281f70f61d00f42edd
version: github.com/BuilderIo/qwik-build/0080db89d43112fea2ed6b281f70f61d00f42edd(@types/node@20.8.4)(terser@5.21.0)(undici@5.26.0)
'@builder.io/qwik-city':
specifier: github:BuilderIo/qwik-city-build#bc4e963e1243fd2a6d74dcc5fe5d12fd69a8ac96
version: github.com/BuilderIo/qwik-city-build/bc4e963e1243fd2a6d74dcc5fe5d12fd69a8ac96(@types/node@20.8.4)(rollup@3.26.3)(terser@5.21.0)
specifier: github:BuilderIo/qwik-city-build#fd39ca1abf09e4016ff738679030b2486ea5f7fc
version: github.com/BuilderIo/qwik-city-build/fd39ca1abf09e4016ff738679030b2486ea5f7fc(@types/node@20.8.4)(rollup@3.26.3)(terser@5.21.0)
'@builder.io/qwik-labs':
specifier: github:BuilderIo/qwik-labs-build#5f672e948330926b348cbac8692d9aba6f8f41b2
version: github.com/BuilderIo/qwik-labs-build/5f672e948330926b348cbac8692d9aba6f8f41b2
specifier: github:BuilderIo/qwik-labs-build#c336fbf3ac62af6b056b8f7b203a6c1d48756f91
version: github.com/BuilderIo/qwik-labs-build/c336fbf3ac62af6b056b8f7b203a6c1d48756f91
'@builder.io/qwik-react':
specifier: 0.5.0
version: 0.5.0(@builder.io/qwik@1.2.16)(@types/react-dom@18.2.13)(@types/react@18.2.28)(react-dom@18.2.0)(react@18.2.0)
@@ -245,7 +245,7 @@ importers:
version: 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.28)(react@18.2.0)
'@modular-forms/qwik':
specifier: ^0.21.0
version: 0.21.0(@builder.io/qwik-city@1.2.16-dev20231101222729)(@builder.io/qwik@1.2.16)
version: 0.21.0(@builder.io/qwik-city@1.2.16-dev20231102212759)(@builder.io/qwik@1.2.16)
'@mui/material':
specifier: ^5.14.13
version: 5.14.13(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.28)(react-dom@18.2.0)(react@18.2.0)
@@ -372,13 +372,13 @@ importers:
version: 0.7.1
'@builder.io/qwik-auth':
specifier: 0.1.0
version: 0.1.0(@auth/core@0.7.1)(@builder.io/qwik-city@1.2.16-dev20231101222729)(@builder.io/qwik@1.2.16)
version: 0.1.0(@auth/core@0.7.1)(@builder.io/qwik-city@1.2.16-dev20231102212759)(@builder.io/qwik@1.2.16)
'@libsql/client':
specifier: ^0.3.5
version: 0.3.5
'@modular-forms/qwik':
specifier: ^0.12.0
version: 0.12.0(@builder.io/qwik-city@1.2.16-dev20231101222729)(@builder.io/qwik@1.2.16)
version: 0.12.0(@builder.io/qwik-city@1.2.16-dev20231102212759)(@builder.io/qwik@1.2.16)
'@typescript/analyze-trace':
specifier: ^0.10.1
version: 0.10.1
@@ -399,11 +399,11 @@ importers:
version: 0.13.0
devDependencies:
'@builder.io/qwik':
specifier: github:BuilderIo/qwik-build#7521f8e9157e643e7948fa4ae99234e41b56cf95
version: github.com/BuilderIo/qwik-build/7521f8e9157e643e7948fa4ae99234e41b56cf95(@types/node@20.8.4)(terser@5.21.0)(undici@5.26.0)
specifier: github:BuilderIo/qwik-build#0080db89d43112fea2ed6b281f70f61d00f42edd
version: github.com/BuilderIo/qwik-build/0080db89d43112fea2ed6b281f70f61d00f42edd(@types/node@20.8.4)(terser@5.21.0)(undici@5.26.0)
'@builder.io/qwik-city':
specifier: github:BuilderIo/qwik-city-build#bc4e963e1243fd2a6d74dcc5fe5d12fd69a8ac96
version: github.com/BuilderIo/qwik-city-build/bc4e963e1243fd2a6d74dcc5fe5d12fd69a8ac96(@types/node@20.8.4)(rollup@3.26.3)(terser@5.21.0)
specifier: github:BuilderIo/qwik-city-build#fd39ca1abf09e4016ff738679030b2486ea5f7fc
version: github.com/BuilderIo/qwik-city-build/fd39ca1abf09e4016ff738679030b2486ea5f7fc(@types/node@20.8.4)(rollup@3.26.3)(terser@5.21.0)
'@builder.io/qwik-labs':
specifier: workspace:*
version: link:../qwik-labs
@@ -1342,7 +1342,7 @@ packages:
hasBin: true
dev: true
/@builder.io/qwik-auth@0.1.0(@auth/core@0.7.1)(@builder.io/qwik-city@1.2.16-dev20231101222729)(@builder.io/qwik@1.2.16):
/@builder.io/qwik-auth@0.1.0(@auth/core@0.7.1)(@builder.io/qwik-city@1.2.16-dev20231102212759)(@builder.io/qwik@1.2.16):
resolution: {integrity: sha512-uwwVbam6yQs9evtmof/+SpRT7DzoxD+2DSwsndGcm9JBU4Sh1xMyzll6F9QbivKVboglx+4X05OzJG7QTttWMQ==}
engines: {node: '>=16.8.0 <18.0.0 || >=18.11'}
peerDependencies:
@@ -1351,8 +1351,8 @@ packages:
'@builder.io/qwik-city': '>=0.6.0'
dependencies:
'@auth/core': 0.7.1
'@builder.io/qwik': github.com/BuilderIo/qwik-build/7521f8e9157e643e7948fa4ae99234e41b56cf95(@types/node@20.8.4)(terser@5.21.0)(undici@5.26.0)
'@builder.io/qwik-city': github.com/BuilderIo/qwik-city-build/bc4e963e1243fd2a6d74dcc5fe5d12fd69a8ac96(@types/node@20.8.4)(rollup@3.26.3)(terser@5.21.0)
'@builder.io/qwik': github.com/BuilderIo/qwik-build/0080db89d43112fea2ed6b281f70f61d00f42edd(@types/node@20.8.4)(terser@5.21.0)(undici@5.26.0)
'@builder.io/qwik-city': github.com/BuilderIo/qwik-city-build/fd39ca1abf09e4016ff738679030b2486ea5f7fc(@types/node@20.8.4)(rollup@3.26.3)(terser@5.21.0)
dev: false
/@builder.io/qwik-city@1.2.13(rollup@3.26.3):
@@ -1381,7 +1381,7 @@ packages:
react: '>=18.0.0'
react-dom: '>=18.0.0'
dependencies:
'@builder.io/qwik': github.com/BuilderIo/qwik-build/7521f8e9157e643e7948fa4ae99234e41b56cf95(@types/node@20.8.4)(terser@5.21.0)(undici@5.26.0)
'@builder.io/qwik': github.com/BuilderIo/qwik-build/0080db89d43112fea2ed6b281f70f61d00f42edd(@types/node@20.8.4)(terser@5.21.0)(undici@5.26.0)
'@types/react': 18.2.28
'@types/react-dom': 18.2.13
react: 18.2.0
@@ -1405,7 +1405,7 @@ packages:
'@builder.io/qwik': '>=1.0.0'
undici: ^5.14.0
dependencies:
'@builder.io/qwik': github.com/BuilderIo/qwik-build/7521f8e9157e643e7948fa4ae99234e41b56cf95(@types/node@20.8.4)(terser@5.21.0)(undici@5.26.0)
'@builder.io/qwik': github.com/BuilderIo/qwik-build/0080db89d43112fea2ed6b281f70f61d00f42edd(@types/node@20.8.4)(terser@5.21.0)(undici@5.26.0)
undici: 5.26.0
dev: true
@@ -2817,24 +2817,24 @@ packages:
resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==}
dev: true
/@modular-forms/qwik@0.12.0(@builder.io/qwik-city@1.2.16-dev20231101222729)(@builder.io/qwik@1.2.16):
/@modular-forms/qwik@0.12.0(@builder.io/qwik-city@1.2.16-dev20231102212759)(@builder.io/qwik@1.2.16):
resolution: {integrity: sha512-IJi5Uvm1Z1tJZLOpYM8jWza40Viac6tblnMre0pdrslVv7tW3MnXFgQgO539YksooOsn1Jn1KjVUVmhiMuXXuA==}
peerDependencies:
'@builder.io/qwik': ^1.0.0
'@builder.io/qwik-city': ^1.0.0
dependencies:
'@builder.io/qwik': github.com/BuilderIo/qwik-build/7521f8e9157e643e7948fa4ae99234e41b56cf95(@types/node@20.8.4)(terser@5.21.0)(undici@5.26.0)
'@builder.io/qwik-city': github.com/BuilderIo/qwik-city-build/bc4e963e1243fd2a6d74dcc5fe5d12fd69a8ac96(@types/node@20.8.4)(rollup@3.26.3)(terser@5.21.0)
'@builder.io/qwik': github.com/BuilderIo/qwik-build/0080db89d43112fea2ed6b281f70f61d00f42edd(@types/node@20.8.4)(terser@5.21.0)(undici@5.26.0)
'@builder.io/qwik-city': github.com/BuilderIo/qwik-city-build/fd39ca1abf09e4016ff738679030b2486ea5f7fc(@types/node@20.8.4)(rollup@3.26.3)(terser@5.21.0)
dev: false
/@modular-forms/qwik@0.21.0(@builder.io/qwik-city@1.2.16-dev20231101222729)(@builder.io/qwik@1.2.16):
/@modular-forms/qwik@0.21.0(@builder.io/qwik-city@1.2.16-dev20231102212759)(@builder.io/qwik@1.2.16):
resolution: {integrity: sha512-PJnGnXfAI9JStXZbgAByGOsTTuSkVhjb8FRDgrdHa33zoHOvC5PkA2ymxN7JK1LodKd4FC3c7ZlFv5goYFCKDA==}
peerDependencies:
'@builder.io/qwik': ^1.2.4
'@builder.io/qwik-city': ^1.2.4
dependencies:
'@builder.io/qwik': github.com/BuilderIo/qwik-build/7521f8e9157e643e7948fa4ae99234e41b56cf95(@types/node@20.8.4)(terser@5.21.0)(undici@5.26.0)
'@builder.io/qwik-city': github.com/BuilderIo/qwik-city-build/bc4e963e1243fd2a6d74dcc5fe5d12fd69a8ac96(@types/node@20.8.4)(rollup@3.26.3)(terser@5.21.0)
'@builder.io/qwik': github.com/BuilderIo/qwik-build/0080db89d43112fea2ed6b281f70f61d00f42edd(@types/node@20.8.4)(terser@5.21.0)(undici@5.26.0)
'@builder.io/qwik-city': github.com/BuilderIo/qwik-city-build/fd39ca1abf09e4016ff738679030b2486ea5f7fc(@types/node@20.8.4)(rollup@3.26.3)(terser@5.21.0)
dev: true
/@mui/base@5.0.0-beta.19(@types/react@18.2.28)(react-dom@18.2.0)(react@18.2.0):
@@ -5562,7 +5562,7 @@ packages:
peerDependencies:
'@builder.io/qwik': '*'
dependencies:
'@builder.io/qwik': github.com/BuilderIo/qwik-build/7521f8e9157e643e7948fa4ae99234e41b56cf95(@types/node@20.8.4)(terser@5.21.0)(undici@5.26.0)
'@builder.io/qwik': github.com/BuilderIo/qwik-build/0080db89d43112fea2ed6b281f70f61d00f42edd(@types/node@20.8.4)(terser@5.21.0)(undici@5.26.0)
dev: true
/@vercel/nft@0.22.6(supports-color@9.4.0):
@@ -18833,9 +18833,9 @@ packages:
/zwitch@2.0.4:
resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
github.com/BuilderIo/qwik-build/7521f8e9157e643e7948fa4ae99234e41b56cf95(@types/node@20.8.4)(terser@5.21.0)(undici@5.26.0):
resolution: {tarball: https://codeload.github.com/BuilderIo/qwik-build/tar.gz/7521f8e9157e643e7948fa4ae99234e41b56cf95}
id: github.com/BuilderIo/qwik-build/7521f8e9157e643e7948fa4ae99234e41b56cf95
github.com/BuilderIo/qwik-build/0080db89d43112fea2ed6b281f70f61d00f42edd(@types/node@20.8.4)(terser@5.21.0)(undici@5.26.0):
resolution: {tarball: https://codeload.github.com/BuilderIo/qwik-build/tar.gz/0080db89d43112fea2ed6b281f70f61d00f42edd}
id: github.com/BuilderIo/qwik-build/0080db89d43112fea2ed6b281f70f61d00f42edd
name: '@builder.io/qwik'
version: 1.2.16
engines: {node: '>=16.8.0 <18.0.0 || >=18.11'}
@@ -18855,11 +18855,11 @@ packages:
- sugarss
- terser
github.com/BuilderIo/qwik-city-build/bc4e963e1243fd2a6d74dcc5fe5d12fd69a8ac96(@types/node@20.8.4)(rollup@3.26.3)(terser@5.21.0):
resolution: {tarball: https://codeload.github.com/BuilderIo/qwik-city-build/tar.gz/bc4e963e1243fd2a6d74dcc5fe5d12fd69a8ac96}
id: github.com/BuilderIo/qwik-city-build/bc4e963e1243fd2a6d74dcc5fe5d12fd69a8ac96
github.com/BuilderIo/qwik-city-build/fd39ca1abf09e4016ff738679030b2486ea5f7fc(@types/node@20.8.4)(rollup@3.26.3)(terser@5.21.0):
resolution: {tarball: https://codeload.github.com/BuilderIo/qwik-city-build/tar.gz/fd39ca1abf09e4016ff738679030b2486ea5f7fc}
id: github.com/BuilderIo/qwik-city-build/fd39ca1abf09e4016ff738679030b2486ea5f7fc
name: '@builder.io/qwik-city'
version: 1.2.16-dev20231101222729
version: 1.2.16-dev20231102212759
engines: {node: '>=16.8.0 <18.0.0 || >=18.11'}
dependencies:
'@mdx-js/mdx': 2.3.0
@@ -18882,8 +18882,8 @@ packages:
- supports-color
- terser
github.com/BuilderIo/qwik-labs-build/5f672e948330926b348cbac8692d9aba6f8f41b2:
resolution: {tarball: https://codeload.github.com/BuilderIo/qwik-labs-build/tar.gz/5f672e948330926b348cbac8692d9aba6f8f41b2}
github.com/BuilderIo/qwik-labs-build/c336fbf3ac62af6b056b8f7b203a6c1d48756f91:
resolution: {tarball: https://codeload.github.com/BuilderIo/qwik-labs-build/tar.gz/c336fbf3ac62af6b056b8f7b203a6c1d48756f91}
name: '@builder.io/qwik-labs'
version: 0.0.1
engines: {node: '>=16.8.0 <18.0.0 || >=18.11'}

View File

@@ -98,7 +98,8 @@
"starters/dev-server.ts",
"packages/qwik-react/vite",
"@types/deno.d.ts",
"@types/bun.d.ts"
"@types/bun.d.ts",
"types.d.ts"
],
"exclude": [
"packages/create-qwik/dist",

12
types.d.ts vendored Normal file
View File

@@ -0,0 +1,12 @@
declare module '*?jsx' {
const Cmp: import('./packages/qwik/').FunctionComponent<
Omit<
import('./packages/qwik/').QwikIntrinsicElements['img'],
'src' | 'width' | 'height' | 'srcSet'
>
>;
export default Cmp;
export const width: number;
export const height: number;
export const srcSet: string;
}