diff --git a/package.json b/package.json
index 4df6bd1..4436676 100644
--- a/package.json
+++ b/package.json
@@ -7,7 +7,7 @@
"build": "astro build",
"preview": "astro preview",
"astro": "astro",
- "test": "playwright test"
+ "test": "playwright clear-cache && playwright test"
},
"dependencies": {
"@astrojs/solid-js": "^5.1.0",
diff --git a/src/builtin-components/Background/Background.tsx b/src/builtin-components/Background/Background.tsx
index 40d93c7..e27992d 100644
--- a/src/builtin-components/Background/Background.tsx
+++ b/src/builtin-components/Background/Background.tsx
@@ -1,21 +1,40 @@
import './Background.sass'
-import { Show } from 'solid-js'
-import backgroundAvif from '../../assets/images/background.avif'
-import backgroundWebp from '../../assets/images/background.webp'
+import { Show, createSignal } from 'solid-js'
+// import backgroundAvif from '../../assets/images/background.avif'
+// import backgroundWebp from '../../assets/images/background.webp'
+import sharp from 'sharp'
+import fs from 'fs'
interface Props {
image?: boolean
color?: string
}
+const convertBackground = async (props: Props) => {
+ const webpOutputPath = 'src/assets/compressed-images/background.webp'
+ const avifOutputPath = 'src/assets/compressed-images/background.avif'
+ const inputPath = 'src/assets/images/background.png'
+
+ if (!fs.existsSync(webpOutputPath) || !fs.existsSync(avifOutputPath)) {
+ const webpBuffer = await sharp(inputPath).webp({ quality: 75 }).resize(1920).toBuffer()
+ await sharp(webpBuffer).toFile(webpOutputPath)
+
+ const avifBuffer = await sharp(inputPath).avif({ quality: 60 }).resize(1920).toBuffer()
+ await sharp(avifBuffer).toFile(avifOutputPath)
+ }
+}
+
export default (props: Props) => {
+ let [imageSrc] = createSignal('src/assets/compressed-images/background.webp')
+ convertBackground(props)
+
return (
<>
-
-
-
+
+
+
diff --git a/src/builtin-components/Button/Button.sass b/src/builtin-components/Button/Button.sass
index b2a4d46..9371868 100644
--- a/src/builtin-components/Button/Button.sass
+++ b/src/builtin-components/Button/Button.sass
@@ -10,7 +10,7 @@
text-align: center
text-decoration: none
display: inline-block
- font-size: 1rem
+ font-size: 0.75rem
font-weight: 700
cursor: pointer
transition: all 0.2s ease-out
diff --git a/src/builtin-components/Image/Image.tsx b/src/builtin-components/Image/Image.tsx
index 7c897e6..438eae0 100644
--- a/src/builtin-components/Image/Image.tsx
+++ b/src/builtin-components/Image/Image.tsx
@@ -1,4 +1,6 @@
import sharp from 'sharp'
+import { createSignal } from 'solid-js'
+import fs from 'fs'
interface Props {
src: string
@@ -7,22 +9,28 @@ interface Props {
}
const convertImage = async (props: Props) => {
- const webp = await sharp(`src/assets/images/${props.src}`).webp({ quality: 75 }).resize(props.size).toBuffer()
- await sharp(webp).toFile(`src/assets/compressed-images/${props.src.split('.').slice(0, -1).join('.')}.webp`)
+ const webpOutputPath = `src/assets/compressed-images/${props.src.split('.').slice(0, -1).join('.')}.webp`
+ const avifOutputPath = `src/assets/compressed-images/${props.src.split('.').slice(0, -1).join('.')}.avif`
- const avif = await sharp(`src/assets/images/${props.src}`).avif({ quality: 60 }).resize(props.size).toBuffer()
- await sharp(avif).toFile(`src/assets/compressed-images/${props.src.split('.').slice(0, -1).join('.')}.avif`)
+ if (!fs.existsSync(webpOutputPath) || !fs.existsSync(avifOutputPath)) {
+ const webpBuffer = await sharp(`src/assets/images/${props.src}`).webp({ quality: 75 }).resize(props.size).toBuffer()
+ await sharp(webpBuffer).toFile(webpOutputPath)
+
+ const avifBuffer = await sharp(`src/assets/images/${props.src}`).avif({ quality: 60 }).resize(props.size).toBuffer()
+ await sharp(avifBuffer).toFile(avifOutputPath)
+ }
}
export default (props: Props) => {
+ let [imageSrc] = createSignal(`src/assets/compressed-images/${props.src.split('.').slice(0, -1).join('.')}.webp`)
convertImage(props)
return (
<>
-
-
-
-
+
+
+
+
>
)
diff --git a/src/builtin-components/Link/Link.tsx b/src/builtin-components/Link/Link.tsx
index 927ce6e..4ccf49f 100644
--- a/src/builtin-components/Link/Link.tsx
+++ b/src/builtin-components/Link/Link.tsx
@@ -1,11 +1,9 @@
-
interface Props {
to: string
children?: any
}
export default (props: Props) => {
-
return (
<>
diff --git a/src/components/Counter.sass b/src/components/Counter.sass
new file mode 100644
index 0000000..5906f01
--- /dev/null
+++ b/src/components/Counter.sass
@@ -0,0 +1,47 @@
+.counter
+ display: flex
+ flex-direction: column
+ align-items: center
+ gap: 1rem
+ margin: 2rem
+ color: white
+ border: 1px solid rgba(22, 34, 60, 0.5)
+ padding: 1rem 2rem
+ border-radius: 16px
+ background: rgba(134, 152, 217, 0.1)
+
+ &__display
+ font-size: 1.75rem
+ font-weight: bold
+
+ &__buttons
+ display: flex
+ justify-content: center
+ gap: 0.25rem
+
+ // &:hover
+ // background: color.adjust(vars.$primaryColor, $blackness: 20%)
+
+
+ &__decrement
+ width: 2rem
+ height: 2.25rem
+ padding: auto
+ font-size: 1rem
+ font-weight: bold
+ cursor: pointer
+ text-decoration: none
+ background-color: rgba(86, 14, 14, 0.915)
+ border-radius: 8px
+ color: white
+ border: 1px solid rgba(255,255,255,0.2)
+
+ &:active
+ transform: scale(0.95)
+
+ &__increment
+ @extend .counter__decrement
+ background-color: rgb(14, 42, 86, 0.915)
+
+ &:active
+ transform: scale(0.95)
diff --git a/src/components/Counter.tsx b/src/components/Counter.tsx
new file mode 100644
index 0000000..e45cf73
--- /dev/null
+++ b/src/components/Counter.tsx
@@ -0,0 +1,30 @@
+import './Counter.sass'
+import { createSignal } from 'solid-js'
+
+let [count, setCount] = createSignal(0)
+
+const increment = () => {
+ setCount(count() + 1)
+}
+
+const decrement = () => {
+ setCount(count() - 1)
+}
+
+export default () => {
+ return (
+ <>
+
+ {count()}
+
+
+
+
+
+ >
+ )
+}
diff --git a/src/pages/index.astro b/src/pages/index.astro
index 8c9daec..dcb6894 100644
--- a/src/pages/index.astro
+++ b/src/pages/index.astro
@@ -2,15 +2,18 @@
import Layout from '../layouts/Layout.astro'
import Button from '../builtin-components/Button/Button.tsx'
import Image from '../builtin-components/Image/Image'
+import Link from '../builtin-components/Link/Link'
+import Counter from '../components/Counter.tsx'
---
-
+
-
+
-
+
Fast WebApp Template
+
@@ -24,7 +27,5 @@ import Image from '../builtin-components/Image/Image'
align-content: center
margin: 2rem
height: 90vh
-
-