@qwik.dev/core 0.0.0 → 2.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (258) hide show
  1. package/LICENSE +22 -0
  2. package/bindings/qwik.linux-x64-gnu.node +0 -0
  3. package/bindings/qwik.wasm.cjs +484 -0
  4. package/bindings/qwik.wasm.mjs +477 -0
  5. package/bindings/qwik_wasm_bg.wasm +0 -0
  6. package/build.d.ts +2 -0
  7. package/dist/build/index.cjs +35 -0
  8. package/dist/build/index.cjs.map +7 -0
  9. package/dist/build/index.d.ts +22 -0
  10. package/dist/build/index.dev.cjs +37 -0
  11. package/dist/build/index.dev.cjs.map +7 -0
  12. package/dist/build/index.dev.mjs +12 -0
  13. package/dist/build/index.dev.mjs.map +7 -0
  14. package/dist/build/index.mjs +12 -0
  15. package/dist/build/index.mjs.map +7 -0
  16. package/dist/build/index.prod.cjs +37 -0
  17. package/dist/build/index.prod.cjs.map +7 -0
  18. package/dist/build/index.prod.mjs +12 -0
  19. package/dist/build/index.prod.mjs.map +7 -0
  20. package/dist/build/package.json +8 -0
  21. package/dist/cli.cjs +4890 -0
  22. package/dist/core-internal.d.ts +3895 -0
  23. package/dist/core.cjs +10923 -0
  24. package/dist/core.cjs.map +1 -0
  25. package/dist/core.min.mjs +1 -0
  26. package/dist/core.mjs +10819 -0
  27. package/dist/core.mjs.map +1 -0
  28. package/dist/core.prod.cjs +5181 -0
  29. package/dist/core.prod.mjs +6025 -0
  30. package/dist/index.d.ts +2 -0
  31. package/dist/insights/index.d.ts +1 -0
  32. package/dist/insights/index.qwik.cjs +751 -0
  33. package/dist/insights/index.qwik.mjs +751 -0
  34. package/dist/insights/insights.d.ts +59 -0
  35. package/dist/insights/vite/index.cjs +82 -0
  36. package/dist/insights/vite/index.d.ts +1 -0
  37. package/dist/insights/vite/index.mjs +55 -0
  38. package/dist/insights/vite/insights-plugin.d.ts +10 -0
  39. package/dist/jsx-runtime/index.d.ts +2 -0
  40. package/dist/jsx-runtime.d.ts +2 -0
  41. package/dist/loader/index.cjs +4 -0
  42. package/dist/loader/index.d.ts +2 -0
  43. package/dist/loader/index.mjs +3 -0
  44. package/dist/loader/package.json +8 -0
  45. package/dist/optimizer.cjs +9145 -0
  46. package/dist/optimizer.d.ts +707 -0
  47. package/dist/optimizer.mjs +9709 -0
  48. package/dist/prefetch/index.cjs +4 -0
  49. package/dist/prefetch/index.d.ts +2 -0
  50. package/dist/prefetch/index.mjs +3 -0
  51. package/dist/prefetch/package.json +8 -0
  52. package/dist/qwik-prefetch.debug.js +244 -0
  53. package/dist/qwik-prefetch.js +1 -0
  54. package/dist/qwikloader.debug.js +228 -0
  55. package/dist/qwikloader.js +3 -0
  56. package/dist/server-modules.d.ts +38 -0
  57. package/dist/server.cjs +8942 -0
  58. package/dist/server.d.ts +404 -0
  59. package/dist/server.mjs +8877 -0
  60. package/dist/starters/adapters/aws-lambda/.eslintignore +2 -0
  61. package/dist/starters/adapters/aws-lambda/.prettierignore +2 -0
  62. package/dist/starters/adapters/aws-lambda/adapters/aws-lambda/vite.config.mts +21 -0
  63. package/dist/starters/adapters/aws-lambda/gitignore +2 -0
  64. package/dist/starters/adapters/aws-lambda/package.json +23 -0
  65. package/dist/starters/adapters/aws-lambda/serverless.yml +31 -0
  66. package/dist/starters/adapters/aws-lambda/src/entry_aws-lambda.tsx +32 -0
  67. package/dist/starters/adapters/azure-swa/README.md +13 -0
  68. package/dist/starters/adapters/azure-swa/adapters/azure-swa/vite.config.mts +23 -0
  69. package/dist/starters/adapters/azure-swa/azure-functions/host.json +20 -0
  70. package/dist/starters/adapters/azure-swa/gitignore +3 -0
  71. package/dist/starters/adapters/azure-swa/package.json +28 -0
  72. package/dist/starters/adapters/azure-swa/public/staticwebapp.config.json +23 -0
  73. package/dist/starters/adapters/azure-swa/src/entry.azure-swa.tsx +22 -0
  74. package/dist/starters/adapters/azure-swa/swa-cli.config.json +11 -0
  75. package/dist/starters/adapters/bun/README.md +9 -0
  76. package/dist/starters/adapters/bun/adapters/bun/vite.config.mts +28 -0
  77. package/dist/starters/adapters/bun/package.json +27 -0
  78. package/dist/starters/adapters/bun/src/entry.bun.ts +46 -0
  79. package/dist/starters/adapters/cloud-run/Dockerfile +24 -0
  80. package/dist/starters/adapters/cloud-run/README.md +7 -0
  81. package/dist/starters/adapters/cloud-run/adapters/cloud-run/vite.config.mts +15 -0
  82. package/dist/starters/adapters/cloud-run/package.json +24 -0
  83. package/dist/starters/adapters/cloud-run/src/entry.cloud-run.tsx +96 -0
  84. package/dist/starters/adapters/cloudflare-pages/README.md +46 -0
  85. package/dist/starters/adapters/cloudflare-pages/adapters/cloudflare-pages/vite.config.mts +15 -0
  86. package/dist/starters/adapters/cloudflare-pages/gitignore +2 -0
  87. package/dist/starters/adapters/cloudflare-pages/package.json +28 -0
  88. package/dist/starters/adapters/cloudflare-pages/public/_headers +9 -0
  89. package/dist/starters/adapters/cloudflare-pages/public/_redirects +1 -0
  90. package/dist/starters/adapters/cloudflare-pages/src/entry.cloudflare-pages.tsx +24 -0
  91. package/dist/starters/adapters/deno/README.md +9 -0
  92. package/dist/starters/adapters/deno/adapters/deno/vite.config.mts +23 -0
  93. package/dist/starters/adapters/deno/package.json +24 -0
  94. package/dist/starters/adapters/deno/src/entry.deno.ts +45 -0
  95. package/dist/starters/adapters/express/README.md +9 -0
  96. package/dist/starters/adapters/express/adapters/express/vite.config.mts +15 -0
  97. package/dist/starters/adapters/express/package.json +33 -0
  98. package/dist/starters/adapters/express/src/entry.express.tsx +70 -0
  99. package/dist/starters/adapters/fastify/README.md +9 -0
  100. package/dist/starters/adapters/fastify/adapters/fastify/vite.config.mts +15 -0
  101. package/dist/starters/adapters/fastify/package.json +33 -0
  102. package/dist/starters/adapters/fastify/src/entry.fastify.tsx +48 -0
  103. package/dist/starters/adapters/fastify/src/plugins/fastify-qwik.ts +42 -0
  104. package/dist/starters/adapters/firebase/.eslintignore +1 -0
  105. package/dist/starters/adapters/firebase/.prettierignore +1 -0
  106. package/dist/starters/adapters/firebase/adapters/firebase/vite.config.mts +21 -0
  107. package/dist/starters/adapters/firebase/firebase.json +24 -0
  108. package/dist/starters/adapters/firebase/functions/.gitkeep +0 -0
  109. package/dist/starters/adapters/firebase/functions/index.js +5 -0
  110. package/dist/starters/adapters/firebase/functions/package.json +25 -0
  111. package/dist/starters/adapters/firebase/gitignore +3 -0
  112. package/dist/starters/adapters/firebase/package.json +24 -0
  113. package/dist/starters/adapters/firebase/src/entry-firebase.tsx +22 -0
  114. package/dist/starters/adapters/netlify-edge/README.md +64 -0
  115. package/dist/starters/adapters/netlify-edge/adapters/netlify-edge/vite.config.mts +16 -0
  116. package/dist/starters/adapters/netlify-edge/gitignore +2 -0
  117. package/dist/starters/adapters/netlify-edge/netlify.toml +3 -0
  118. package/dist/starters/adapters/netlify-edge/package.json +29 -0
  119. package/dist/starters/adapters/netlify-edge/public/_headers +2 -0
  120. package/dist/starters/adapters/netlify-edge/src/entry.netlify-edge.tsx +22 -0
  121. package/dist/starters/adapters/node-server/README.md +12 -0
  122. package/dist/starters/adapters/node-server/adapters/node-server/vite.config.mts +15 -0
  123. package/dist/starters/adapters/node-server/package.json +23 -0
  124. package/dist/starters/adapters/node-server/src/entry.node-server.tsx +39 -0
  125. package/dist/starters/adapters/static/README.md +5 -0
  126. package/dist/starters/adapters/static/adapters/static/vite.config.mts +19 -0
  127. package/dist/starters/adapters/static/package.json +19 -0
  128. package/dist/starters/adapters/vercel-edge/README.md +43 -0
  129. package/dist/starters/adapters/vercel-edge/adapters/vercel-edge/vite.config.mts +16 -0
  130. package/dist/starters/adapters/vercel-edge/gitignore +2 -0
  131. package/dist/starters/adapters/vercel-edge/package.json +28 -0
  132. package/dist/starters/adapters/vercel-edge/src/entry.vercel-edge.tsx +22 -0
  133. package/dist/starters/adapters/vercel-edge/vercel.json +22 -0
  134. package/dist/starters/features/auth/package.json +20 -0
  135. package/dist/starters/features/auth/src/routes/plugin@auth.ts +8 -0
  136. package/dist/starters/features/bootstrap/package.json +33 -0
  137. package/dist/starters/features/bootstrap/src/components/bootstrap/alert.tsx +8 -0
  138. package/dist/starters/features/bootstrap/src/components/bootstrap/button.tsx +8 -0
  139. package/dist/starters/features/bootstrap/src/components/bootstrap/index.ts +4 -0
  140. package/dist/starters/features/bootstrap/src/components/bootstrap/navbar.tsx +44 -0
  141. package/dist/starters/features/bootstrap/src/components/bootstrap/spinner.tsx +13 -0
  142. package/dist/starters/features/bootstrap/src/constants/data.ts +10 -0
  143. package/dist/starters/features/bootstrap/src/models/bootstrap.ts +8 -0
  144. package/dist/starters/features/bootstrap/src/routes/bootstrap/alerts/index.tsx +28 -0
  145. package/dist/starters/features/bootstrap/src/routes/bootstrap/buttons/index.tsx +32 -0
  146. package/dist/starters/features/bootstrap/src/routes/bootstrap/index.tsx +32 -0
  147. package/dist/starters/features/bootstrap/src/routes/bootstrap/layout.tsx +36 -0
  148. package/dist/starters/features/bootstrap/src/routes/bootstrap/spinners/index.tsx +45 -0
  149. package/dist/starters/features/builder.io/README.md +15 -0
  150. package/dist/starters/features/builder.io/package.json +27 -0
  151. package/dist/starters/features/builder.io/src/components/builder-registry.ts +25 -0
  152. package/dist/starters/features/builder.io/src/components/counter/counter.module.css +23 -0
  153. package/dist/starters/features/builder.io/src/components/counter/counter.tsx +81 -0
  154. package/dist/starters/features/builder.io/src/components/gauge/gauge.module.css +27 -0
  155. package/dist/starters/features/builder.io/src/components/gauge/index.tsx +38 -0
  156. package/dist/starters/features/builder.io/src/routes/[...index]/index.tsx +44 -0
  157. package/dist/starters/features/cypress/cypress/fixtures/example.json +5 -0
  158. package/dist/starters/features/cypress/cypress/support/commands.ts +37 -0
  159. package/dist/starters/features/cypress/cypress/support/component-index.html +12 -0
  160. package/dist/starters/features/cypress/cypress/support/component.ts +42 -0
  161. package/dist/starters/features/cypress/cypress/tsconfig.cy.json +17 -0
  162. package/dist/starters/features/cypress/cypress.config.ts +10 -0
  163. package/dist/starters/features/cypress/cypress.d.ts +14 -0
  164. package/dist/starters/features/cypress/package.json +28 -0
  165. package/dist/starters/features/cypress/src/components/example/example.cy.tsx +18 -0
  166. package/dist/starters/features/cypress/src/components/example/example.tsx +17 -0
  167. package/dist/starters/features/drizzle/drizzle/db/.gitkeep +0 -0
  168. package/dist/starters/features/drizzle/drizzle/migrations/.gitkeep +0 -0
  169. package/dist/starters/features/drizzle/drizzle/schema.ts +24 -0
  170. package/dist/starters/features/drizzle/drizzle.config.ts +9 -0
  171. package/dist/starters/features/drizzle/package.json +41 -0
  172. package/dist/starters/features/drizzle/src/routes/create/index.tsx +42 -0
  173. package/dist/starters/features/drizzle/src/routes/users/[userId]/index.tsx +36 -0
  174. package/dist/starters/features/drizzle/src/routes/users/index.tsx +30 -0
  175. package/dist/starters/features/leaflet-map/package.json +30 -0
  176. package/dist/starters/features/leaflet-map/src/components/leaflet-map/index.tsx +60 -0
  177. package/dist/starters/features/leaflet-map/src/helpers/boundary-box.tsx +6 -0
  178. package/dist/starters/features/leaflet-map/src/models/location.ts +9 -0
  179. package/dist/starters/features/leaflet-map/src/models/map.ts +7 -0
  180. package/dist/starters/features/leaflet-map/src/routes/basic-map/index.tsx +25 -0
  181. package/dist/starters/features/localize/package.json +37 -0
  182. package/dist/starters/features/localize/src/entry.ssr.tsx +32 -0
  183. package/dist/starters/features/localize/src/locales/message.en.json +8 -0
  184. package/dist/starters/features/localize/src/locales/message.it.json +8 -0
  185. package/dist/starters/features/localize/src/routes/[locale]/i18n-utils.ts +94 -0
  186. package/dist/starters/features/localize/src/routes/[locale]/index.tsx +52 -0
  187. package/dist/starters/features/localize/src/routes/[locale]/layout.tsx +12 -0
  188. package/dist/starters/features/orama/package.json +23 -0
  189. package/dist/starters/features/orama/src/orama/index.ts +41 -0
  190. package/dist/starters/features/orama/src/routes/orama/index.tsx +110 -0
  191. package/dist/starters/features/pandacss/.eslintignore +3 -0
  192. package/dist/starters/features/pandacss/.prettierignore +2 -0
  193. package/dist/starters/features/pandacss/gitignore +2 -0
  194. package/dist/starters/features/pandacss/package.json +31 -0
  195. package/dist/starters/features/pandacss/panda.config.ts +22 -0
  196. package/dist/starters/features/pandacss/postcss.config.js +5 -0
  197. package/dist/starters/features/pandacss/src/global.css +5 -0
  198. package/dist/starters/features/pandacss/src/routes/pandacss/index.tsx +18 -0
  199. package/dist/starters/features/partytown/package.json +41 -0
  200. package/dist/starters/features/partytown/src/components/partytown/partytown.tsx +19 -0
  201. package/dist/starters/features/playwright/package.json +18 -0
  202. package/dist/starters/features/playwright/playwright-report/index.html +22024 -0
  203. package/dist/starters/features/playwright/playwright.config.ts +40 -0
  204. package/dist/starters/features/playwright/tests/example.spec.ts +14 -0
  205. package/dist/starters/features/postcss/.vscode/settings.json +3 -0
  206. package/dist/starters/features/postcss/package.json +17 -0
  207. package/dist/starters/features/postcss/postcss.config.js +11 -0
  208. package/dist/starters/features/prisma/package.json +35 -0
  209. package/dist/starters/features/prisma/prisma/schema.prisma +17 -0
  210. package/dist/starters/features/prisma/src/routes/create/index.tsx +42 -0
  211. package/dist/starters/features/prisma/src/routes/users/[userId]/index.tsx +31 -0
  212. package/dist/starters/features/prisma/src/routes/users/index.tsx +27 -0
  213. package/dist/starters/features/react/package.json +41 -0
  214. package/dist/starters/features/react/src/integrations/react/mui.tsx +60 -0
  215. package/dist/starters/features/react/src/routes/react/index.tsx +45 -0
  216. package/dist/starters/features/storybook/.storybook/main.ts +22 -0
  217. package/dist/starters/features/storybook/.storybook/preview-head.html +3 -0
  218. package/dist/starters/features/storybook/.storybook/preview.tsx +19 -0
  219. package/dist/starters/features/storybook/.storybook/tsconfig.json +24 -0
  220. package/dist/starters/features/storybook/package.json +25 -0
  221. package/dist/starters/features/storybook/src/components/button/button.stories.tsx +17 -0
  222. package/dist/starters/features/storybook/src/components/button/button.tsx +27 -0
  223. package/dist/starters/features/styled-vanilla-extract/package.json +28 -0
  224. package/dist/starters/features/styled-vanilla-extract/src/routes/styled-flower/flower.css.ts +83 -0
  225. package/dist/starters/features/styled-vanilla-extract/src/routes/styled-flower/index.tsx +75 -0
  226. package/dist/starters/features/tailwind/.prettierrc.js +3 -0
  227. package/dist/starters/features/tailwind/.vscode/settings.json +3 -0
  228. package/dist/starters/features/tailwind/package.json +18 -0
  229. package/dist/starters/features/tailwind/postcss.config.cjs +6 -0
  230. package/dist/starters/features/tailwind/src/global.css +7 -0
  231. package/dist/starters/features/tailwind/tailwind.config.js +8 -0
  232. package/dist/starters/features/turso/.env.local +2 -0
  233. package/dist/starters/features/turso/package.json +30 -0
  234. package/dist/starters/features/turso/src/utils/turso.ts +21 -0
  235. package/dist/starters/features/vitest/package.json +20 -0
  236. package/dist/starters/features/vitest/src/components/example/example.spec.tsx +32 -0
  237. package/dist/starters/features/vitest/src/components/example/example.tsx +17 -0
  238. package/dist/templates/barrel/component/index.tsx.template +13 -0
  239. package/dist/templates/barrel/markdown/index.md.template +5 -0
  240. package/dist/templates/barrel/mdx/index.mdx.template +5 -0
  241. package/dist/templates/barrel/route/index.tsx.template +9 -0
  242. package/dist/templates/qwik/component/[slug].tsx.template +13 -0
  243. package/dist/templates/qwik/markdown/index.md.template +5 -0
  244. package/dist/templates/qwik/mdx/index.mdx.template +5 -0
  245. package/dist/templates/qwik/route/index.tsx.template +9 -0
  246. package/dist/testing/index.cjs +32425 -0
  247. package/dist/testing/index.d.ts +140 -0
  248. package/dist/testing/index.mjs +32389 -0
  249. package/dist/testing/package.json +9 -0
  250. package/jsx-dev-runtime.d.ts +2 -0
  251. package/jsx-runtime.d.ts +2 -0
  252. package/loader.d.ts +2 -0
  253. package/optimizer.d.ts +2 -0
  254. package/package.json +20 -12
  255. package/public.d.ts +68 -0
  256. package/qwik-cli.cjs +4 -0
  257. package/server.d.ts +15 -0
  258. package/testing.d.ts +2 -0
@@ -0,0 +1,40 @@
1
+ import type { PlaywrightTestConfig } from "@playwright/test";
2
+ import { devices } from "@playwright/test";
3
+
4
+ /**
5
+ * See https://playwright.dev/docs/test-configuration.
6
+ */
7
+ const config: PlaywrightTestConfig = {
8
+ testDir: "./tests",
9
+ /* Run tests in files in parallel */
10
+ fullyParallel: true,
11
+ forbidOnly: !!process.env.CI,
12
+ retries: 2,
13
+ workers: process.env.CI ? 1 : undefined,
14
+ reporter: "html",
15
+ use: {
16
+ actionTimeout: 0,
17
+ trace: "on-first-retry",
18
+ },
19
+ projects: [
20
+ {
21
+ name: "chromium",
22
+ use: {
23
+ ...devices["Desktop Chrome"],
24
+ },
25
+ },
26
+ // {
27
+ // name: 'webkit',
28
+ // use: {
29
+ // ...devices['Desktop Safari'],
30
+ // },
31
+ // },
32
+ ],
33
+
34
+ webServer: {
35
+ command: "npm run preview",
36
+ port: 4173,
37
+ },
38
+ };
39
+
40
+ export default config;
@@ -0,0 +1,14 @@
1
+ import { test, expect } from "@playwright/test";
2
+
3
+ test("homepage has title and links to flower page", async ({ page }) => {
4
+ await page.goto("/");
5
+
6
+ // Expect a title "to contain" a substring.
7
+ await expect(page).toHaveTitle(/Qwik/);
8
+
9
+ // create a locator
10
+ const anchor = page.locator("a.mindblow");
11
+
12
+ // Expect an attribute "to be strictly equal" to the value.
13
+ await expect(anchor).toHaveAttribute("href", "/flower");
14
+ });
@@ -0,0 +1,3 @@
1
+ {
2
+ "css.lint.unknownAtRules": "ignore"
3
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "description": "Use PostCSS in your Qwik app",
3
+ "__qwik__": {
4
+ "displayName": "Integration: PostCSS (styling)",
5
+ "priority": -10,
6
+ "viteConfig": {},
7
+ "docs": [
8
+ "https://qwik.dev/integrations/integration/postcss/",
9
+ "https://github.com/postcss/postcss-load-config"
10
+ ]
11
+ },
12
+ "devDependencies": {
13
+ "autoprefixer": "^10.4.14",
14
+ "postcss": "^8.4.31",
15
+ "postcss-preset-env": "^9.1.0"
16
+ }
17
+ }
@@ -0,0 +1,11 @@
1
+ module.exports = {
2
+ plugins: {
3
+ autoprefixer: {},
4
+ "postcss-preset-env": {
5
+ stage: 3,
6
+ features: {
7
+ "nesting-rules": true,
8
+ },
9
+ },
10
+ },
11
+ }
@@ -0,0 +1,35 @@
1
+ {
2
+ "description": "Next-generation Node.js TypeScript ORM",
3
+ "__qwik__": {
4
+ "displayName": "Integration: Prisma (Database ORM)",
5
+ "priority": -10,
6
+ "viteConfig": {},
7
+ "docs": [
8
+ "https://qwik.dev/integrations/integration/prisma/",
9
+ "https://www.prisma.io/docs/concepts/overview/what-is-prisma"
10
+ ],
11
+ "postInstall": "prisma migrate dev --name initial",
12
+ "nextSteps": {
13
+ "title": "Next Steps",
14
+ "lines": [
15
+ " Prisma was installed with a default DB schema and some demo routes,",
16
+ "",
17
+ " Sqlite was configured by default, but in production",
18
+ " you'll want to use Postgres or MongoDB.",
19
+ "",
20
+ " Check out the Prisma docs for more info:",
21
+ " - https://www.prisma.io/docs/getting-started"
22
+ ]
23
+ }
24
+ },
25
+ "devDependencies": {
26
+ "@prisma/client": "5.3.1",
27
+ "prisma": "^5.3.1"
28
+ },
29
+ "scripts": {
30
+ "postinstall": "prisma generate",
31
+ "prisma:generate": "prisma generate",
32
+ "prisma:migrate": "prisma migrate dev",
33
+ "prisma:migrate:prod": "prisma migrate deploy"
34
+ }
35
+ }
@@ -0,0 +1,17 @@
1
+ // This is your Prisma schema file,
2
+ // learn more about it in the docs: https://pris.ly/d/prisma-schema
3
+
4
+ generator client {
5
+ provider = "prisma-client-js"
6
+ }
7
+
8
+ datasource db {
9
+ provider = "sqlite"
10
+ url = "file:./dev.db"
11
+ }
12
+
13
+ model User {
14
+ id Int @id @default(autoincrement())
15
+ email String @unique
16
+ name String?
17
+ }
@@ -0,0 +1,42 @@
1
+ import { PrismaClient } from "@prisma/client";
2
+ import { Form, routeAction$, z, zod$ } from "@qwik.dev/router";
3
+ import { component$ } from "@qwik.dev/core";
4
+
5
+ export const useCreateUser = routeAction$(
6
+ async (data) => {
7
+ const prisma = new PrismaClient();
8
+ const user = await prisma.user.create({
9
+ data,
10
+ });
11
+ return user;
12
+ },
13
+ zod$({
14
+ name: z.string(),
15
+ email: z.string().email(),
16
+ }),
17
+ );
18
+
19
+ export default component$(() => {
20
+ const createUserAction = useCreateUser();
21
+ return (
22
+ <section>
23
+ <h1>Create User</h1>
24
+ <Form action={createUserAction}>
25
+ <label>
26
+ Name
27
+ <input name="name" value={createUserAction.formData?.get("name")} />
28
+ </label>
29
+ <label>
30
+ Email
31
+ <input name="email" value={createUserAction.formData?.get("email")} />
32
+ </label>
33
+ <button type="submit">Create</button>
34
+ </Form>
35
+ {createUserAction.value && (
36
+ <div>
37
+ <h2>User created successfully!</h2>
38
+ </div>
39
+ )}
40
+ </section>
41
+ );
42
+ });
@@ -0,0 +1,31 @@
1
+ import { PrismaClient } from "@prisma/client";
2
+ import { routeLoader$ } from "@qwik.dev/router";
3
+ import { component$ } from "@qwik.dev/core";
4
+
5
+ export const useGetUser = routeLoader$(async ({ params, status }) => {
6
+ const userId = parseInt(params["userId"], 10);
7
+ const prisma = new PrismaClient();
8
+ const user = await prisma.user.findUnique({ where: { id: userId } });
9
+ if (!user) {
10
+ // Set the status to 404 if the user is not found
11
+ status(404);
12
+ }
13
+ return user;
14
+ });
15
+
16
+ export default component$(() => {
17
+ const user = useGetUser();
18
+ return (
19
+ <section>
20
+ <h1>User detail</h1>
21
+ {user.value ? (
22
+ <>
23
+ <p>Name: {user.value.name}</p>
24
+ <p>Email: {user.value.email}</p>
25
+ </>
26
+ ) : (
27
+ <p>User not found</p>
28
+ )}
29
+ </section>
30
+ );
31
+ });
@@ -0,0 +1,27 @@
1
+ import { PrismaClient } from "@prisma/client";
2
+ import { routeLoader$ } from "@qwik.dev/router";
3
+ import { component$ } from "@qwik.dev/core";
4
+
5
+ export const useGetUsers = routeLoader$(async () => {
6
+ const prisma = new PrismaClient();
7
+ const users = await prisma.user.findMany();
8
+ return users;
9
+ });
10
+
11
+ export default component$(() => {
12
+ const users = useGetUsers();
13
+ return (
14
+ <section>
15
+ <h1>User's directory</h1>
16
+ <ul>
17
+ {users.value.map((user) => (
18
+ <li key={user.id}>
19
+ <a href={`/users/${user.id}`}>
20
+ {user.name} ({user.email})
21
+ </a>
22
+ </li>
23
+ ))}
24
+ </ul>
25
+ </section>
26
+ );
27
+ });
@@ -0,0 +1,41 @@
1
+ {
2
+ "description": "Use React components into your Qwik app",
3
+ "__qwik__": {
4
+ "displayName": "Framework: React",
5
+ "priority": -20,
6
+ "docs": [
7
+ "https://qwik.dev/integrations/integration/react/"
8
+ ],
9
+ "nextSteps": {
10
+ "title": "New folders created!",
11
+ "lines": [
12
+ " - /src/routes/react: New public route showcasing react integration",
13
+ " - /src/integrations/react: Here's where the react component lives"
14
+ ]
15
+ },
16
+ "viteConfig": {
17
+ "imports": [
18
+ {
19
+ "namedImports": [
20
+ "qwikReact"
21
+ ],
22
+ "importPath": "@qwik.dev/react/vite"
23
+ }
24
+ ],
25
+ "vitePlugins": [
26
+ "qwikReact()"
27
+ ]
28
+ }
29
+ },
30
+ "devDependencies": {
31
+ "@qwik.dev/react": "0.5.0",
32
+ "@emotion/react": "^11.11.1",
33
+ "@emotion/styled": "^11.11.0",
34
+ "@mui/material": "^5.13.0",
35
+ "@mui/x-data-grid": "^6.4.0",
36
+ "@types/react": "^18.2.28",
37
+ "@types/react-dom": "^18.2.13",
38
+ "react": "18.2.0",
39
+ "react-dom": "18.2.0"
40
+ }
41
+ }
@@ -0,0 +1,60 @@
1
+ /** @jsxImportSource react */
2
+
3
+ import { qwikify$ } from "@qwik.dev/react";
4
+ import { Button, Slider } from "@mui/material";
5
+ import { DataGrid, GridColDef, GridValueGetterParams } from "@mui/x-data-grid";
6
+
7
+ export const MUIButton = qwikify$(Button);
8
+ export const MUISlider = qwikify$(Slider, { eagerness: "hover" });
9
+
10
+ export const TableApp = qwikify$(() => {
11
+ const columns: GridColDef[] = [
12
+ { field: "id", headerName: "ID", width: 70 },
13
+ { field: "firstName", headerName: "First name", width: 130 },
14
+ { field: "lastName", headerName: "Last name", width: 130 },
15
+ {
16
+ field: "age",
17
+ headerName: "Age",
18
+ type: "number",
19
+ width: 90,
20
+ },
21
+ {
22
+ field: "fullName",
23
+ headerName: "Full name",
24
+ description: "This column has a value getter and is not sortable.",
25
+ sortable: false,
26
+ width: 160,
27
+ valueGetter: (params: GridValueGetterParams) =>
28
+ `${params.row.firstName || ""} ${params.row.lastName || ""}`,
29
+ },
30
+ ];
31
+
32
+ const rows = [
33
+ { id: 1, lastName: "Snow", firstName: "Jon", age: 35 },
34
+ { id: 2, lastName: "Lannister", firstName: "Cersei", age: 42 },
35
+ { id: 3, lastName: "Lannister", firstName: "Jaime", age: 45 },
36
+ { id: 4, lastName: "Stark", firstName: "Arya", age: 16 },
37
+ { id: 5, lastName: "Targaryen", firstName: "Daenerys", age: null },
38
+ { id: 6, lastName: "Melisandre", firstName: null, age: 150 },
39
+ { id: 7, lastName: "Clifford", firstName: "Ferrara", age: 44 },
40
+ { id: 8, lastName: "Frances", firstName: "Rossini", age: 36 },
41
+ { id: 9, lastName: "Roxie", firstName: "Harvey", age: 65 },
42
+ ];
43
+
44
+ return (
45
+ <>
46
+ <h1>Hello from React</h1>
47
+
48
+ <div style={{ height: 400, width: "100%" }}>
49
+ <DataGrid
50
+ rows={rows}
51
+ columns={columns}
52
+ pageSize={5}
53
+ rowsPerPageOptions={[5]}
54
+ checkboxSelection
55
+ disableSelectionOnClick
56
+ />
57
+ </div>
58
+ </>
59
+ );
60
+ });
@@ -0,0 +1,45 @@
1
+ import type { DocumentHead } from "@qwik.dev/router";
2
+ import { component$, useSignal } from "@qwik.dev/core";
3
+ import { MUIButton, MUISlider, TableApp } from "~/integrations/react/mui";
4
+
5
+ export default component$(() => {
6
+ const show = useSignal(false);
7
+ const count = useSignal(0);
8
+ const variant = useSignal<"contained" | "outlined" | "text">("contained");
9
+
10
+ return (
11
+ <>
12
+ <h1>Qwik/React mother of all demos</h1>
13
+ <select
14
+ value={variant.value}
15
+ onChange$={(ev) => {
16
+ variant.value = (ev.target as any).value;
17
+ }}
18
+ >
19
+ <option>text</option>
20
+ <option>outlined</option>
21
+ <option selected>contained</option>
22
+ </select>
23
+
24
+ <MUISlider
25
+ value={count.value}
26
+ onChange$={(_, value) => {
27
+ count.value = value as number;
28
+ }}
29
+ />
30
+
31
+ <MUIButton variant={variant.value} host:onClick$={() => alert("click")}>
32
+ Slider is {count.value}
33
+ </MUIButton>
34
+
35
+ <button onClick$={() => (show.value = true)}>Show table</button>
36
+ {show.value && (
37
+ <TableApp client:visible>Slider is {count.value}</TableApp>
38
+ )}
39
+ </>
40
+ );
41
+ });
42
+
43
+ export const head: DocumentHead = {
44
+ title: "Qwik React",
45
+ };
@@ -0,0 +1,22 @@
1
+ import { StorybookConfig } from "storybook-framework-qwik";
2
+
3
+ const config: StorybookConfig = {
4
+ addons: ["@storybook/addon-links", "@storybook/addon-essentials"],
5
+ framework: {
6
+ name: "storybook-framework-qwik",
7
+ },
8
+ core: {
9
+ renderer: "storybook-framework-qwik",
10
+ },
11
+ stories: [
12
+ // ...rootMain.stories,
13
+ "../src/components/**/*.stories.mdx",
14
+ "../src/components/**/*.stories.@(js|jsx|ts|tsx)",
15
+ ],
16
+
17
+ viteFinal: async (config: any) => {
18
+ return config;
19
+ },
20
+ };
21
+
22
+ export default config;
@@ -0,0 +1,3 @@
1
+ <script>
2
+ window.global = window;
3
+ </script>
@@ -0,0 +1,19 @@
1
+ import { Parameters } from "storybook-framework-qwik";
2
+
3
+ import "../src/global.css";
4
+
5
+ export const parameters: Parameters = {
6
+ a11y: {
7
+ config: {},
8
+ options: {
9
+ checks: { "color-contrast": { options: { noScroll: true } } },
10
+ restoreScroll: true,
11
+ },
12
+ },
13
+ options: {
14
+ showRoots: true,
15
+ },
16
+ docs: {
17
+ iframeHeight: "200px",
18
+ },
19
+ };
@@ -0,0 +1,24 @@
1
+ {
2
+ "extends": "../tsconfig.json",
3
+ "compilerOptions": {
4
+ "experimentalDecorators": true,
5
+ "emitDecoratorMetadata": true
6
+ },
7
+
8
+ "exclude": [
9
+ "../**/*.spec.ts",
10
+ "../**/*.test.ts",
11
+ "../**/*.spec.tsx",
12
+ "../**/*.test.tsx"
13
+ ],
14
+ "include": [
15
+ "../src/**/*.stories.ts",
16
+ "../src/**/*.stories.js",
17
+ "../src/**/*.stories.jsx",
18
+ "../src/**/*.stories.tsx",
19
+ "../src/**/*.stories.mdx",
20
+ "*.ts",
21
+ "*.js",
22
+ "preview.tsx"
23
+ ]
24
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "description": "Add Storybook",
3
+ "__qwik__": {
4
+ "displayName": "Integration: Storybook",
5
+ "priority": -10,
6
+ "docs": [
7
+ "https://qwik.dev/integrations/integration/storybook/",
8
+ "https://storybook.js.org/docs/qwik/get-started/why-storybook"
9
+ ]
10
+ },
11
+ "devDependencies": {
12
+ "@storybook/addon-essentials": "^8.2.8",
13
+ "@storybook/addon-links": "^8.2.8",
14
+ "@storybook/blocks": "^8.2.8",
15
+ "@storybook/builder-vite": "^8.2.8",
16
+ "@storybook/html": "^8.2.8",
17
+ "@storybook/html-vite": "^8.2.8",
18
+ "storybook": "^8.2.8",
19
+ "storybook-framework-qwik": "^0.4.0"
20
+ },
21
+ "scripts": {
22
+ "build-storybook": "storybook build",
23
+ "storybook": "storybook dev -p 6006"
24
+ }
25
+ }
@@ -0,0 +1,17 @@
1
+ import type { Meta, StoryObj } from "storybook-framework-qwik";
2
+ import { Button, type ButtonProps } from "./button";
3
+
4
+ const meta: Meta<ButtonProps> = {
5
+ component: Button,
6
+ };
7
+
8
+ type Story = StoryObj<ButtonProps>;
9
+
10
+ export default meta;
11
+
12
+ export const Primary: Story = {
13
+ args: {
14
+ size: "medium",
15
+ },
16
+ render: (props) => <Button {...props}>Some button</Button>,
17
+ };
@@ -0,0 +1,27 @@
1
+ import { component$, Slot, useStylesScoped$ } from "@qwik.dev/core";
2
+
3
+ export interface ButtonProps {
4
+ size?: "small" | "medium" | "large";
5
+ }
6
+ export const Button = component$<ButtonProps>(({ size = "medium" }) => {
7
+ useStylesScoped$(`
8
+ .size-small {
9
+ font-size: 10px;
10
+ }
11
+ .size-medium {
12
+ font-size: 14px;
13
+ }
14
+ .size-large {
15
+ font-size: 18px;
16
+ }
17
+ `);
18
+ return (
19
+ <button
20
+ class={{
21
+ [`size-${size}`]: true,
22
+ }}
23
+ >
24
+ <Slot></Slot>
25
+ </button>
26
+ );
27
+ });
@@ -0,0 +1,28 @@
1
+ {
2
+ "description": "Zero-cost CSS-in-JS for Qwik",
3
+ "__qwik__": {
4
+ "displayName": "Integration: Styled-Vanilla-Extract (styling)",
5
+ "priority": -10,
6
+ "viteConfig": {
7
+ "imports": [
8
+ {
9
+ "namedImports": [
10
+ "vanillaExtractPlugin"
11
+ ],
12
+ "importPath": "styled-vanilla-extract/vite"
13
+ }
14
+ ],
15
+ "vitePlugins": [
16
+ "vanillaExtractPlugin()"
17
+ ]
18
+ },
19
+ "docs": [
20
+ "https://github.com/wmertens/styled-vanilla-extract/blob/main/README.md",
21
+ "https://vanilla-extract.style/"
22
+ ]
23
+ },
24
+ "devDependencies": {
25
+ "@vanilla-extract/css": "^1.12.0",
26
+ "styled-vanilla-extract": "^0.5.4"
27
+ }
28
+ }
@@ -0,0 +1,83 @@
1
+ import { style, styled } from "styled-vanilla-extract/qwik";
2
+
3
+ export const header = style({});
4
+
5
+ export const pride = style({});
6
+
7
+ export const odd = style({});
8
+
9
+ export const Host = styled.div`
10
+ display: grid;
11
+
12
+ align-items: center;
13
+ justify-content: center;
14
+ justify-items: center;
15
+ /* --rotation: 135deg; */
16
+ --rotation: 225deg;
17
+ --size-step: 10px;
18
+ --odd-color-step: 5;
19
+ --even-color-step: 5;
20
+ --center: 12;
21
+
22
+ width: 100%;
23
+ height: 500px;
24
+
25
+ contain: strict;
26
+ `;
27
+
28
+ export const Range = styled.input`
29
+ width: 100%;
30
+ `;
31
+
32
+ export const Square = styled.div`
33
+ --size: calc(40px + var(--index) * var(--size-step));
34
+
35
+ display: block;
36
+ width: var(--size);
37
+ height: var(--size);
38
+ transform: rotateZ(
39
+ calc(var(--rotation) * var(--state) * (var(--center) - var(--index)))
40
+ );
41
+ transition-property: transform, border-color;
42
+ transition-duration: 5s;
43
+ transition-timing-function: ease-in-out;
44
+ grid-area: 1 / 1;
45
+ background: white;
46
+ border-width: 2px;
47
+ border-style: solid;
48
+ border-color: black;
49
+ box-sizing: border-box;
50
+ will-change: transform, border-color;
51
+
52
+ contain: strict;
53
+
54
+ &${odd} {
55
+ --luminance: calc(
56
+ 1 - calc(calc(var(--index) * var(--odd-color-step)) / 256)
57
+ );
58
+ background: rgb(
59
+ calc(172 * var(--luminance)),
60
+ calc(127 * var(--luminance)),
61
+ calc(244 * var(--luminance))
62
+ );
63
+ }
64
+
65
+ ${pride} &:nth-child(12n + 1) {
66
+ background: #e70000;
67
+ }
68
+ ${pride} &:nth-child(12n + 3) {
69
+ background: #ff8c00;
70
+ }
71
+ ${pride} &:nth-child(12n + 5) {
72
+ background: #ffef00;
73
+ }
74
+ ${pride} &:nth-child(12n + 7) {
75
+ background: #00811f;
76
+ }
77
+ ${pride} &:nth-child(12n + 9) {
78
+ background: #0044ff;
79
+ }
80
+ ${pride} &:nth-child(12n + 11) {
81
+ background: #760089;
82
+ }
83
+ `;