From 6b38ab8e4542822df36e9ec61857b2e3b531325a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bogumi=C5=82?= <47248711+milewskibogumil@users.noreply.github.com> Date: Tue, 15 Oct 2024 18:51:31 +0200 Subject: [PATCH] add button ui element --- apps/astro/astro.config.ts | 4 +- apps/astro/package.json | 5 + .../components/ui/button/button.module.scss | 118 ++++++++++++++++++ .../astro/src/components/ui/button/button.tsx | 32 +++++ .../src/components/ui/button/index.astro | 36 ++++++ apps/astro/src/components/ui/button/index.ts | 13 ++ apps/astro/src/global/global.scss | 33 +++-- apps/astro/src/pages/index.astro | 80 +++++------- apps/sanity/schema/singleTypes/Index_Page.ts | 5 + apps/sanity/structure/schema-types.ts | 4 +- bun.lockb | Bin 636256 -> 642448 bytes 11 files changed, 265 insertions(+), 65 deletions(-) create mode 100644 apps/astro/src/components/ui/button/button.module.scss create mode 100644 apps/astro/src/components/ui/button/button.tsx create mode 100644 apps/astro/src/components/ui/button/index.astro create mode 100644 apps/astro/src/components/ui/button/index.ts diff --git a/apps/astro/astro.config.ts b/apps/astro/astro.config.ts index 2ffb053..b257941 100644 --- a/apps/astro/astro.config.ts +++ b/apps/astro/astro.config.ts @@ -1,6 +1,7 @@ import { defineConfig } from "astro/config"; -import vercel from "@astrojs/vercel/serverless"; +import preact from '@astrojs/preact'; import sitemap from "@astrojs/sitemap"; +import vercel from "@astrojs/vercel/serverless"; import { DOMAIN } from "./src/global/constants"; import { isPreviewDeployment } from "./src/utils/is-preview-deployment"; import redirects from "./redirects"; @@ -8,6 +9,7 @@ import redirects from "./redirects"; export default defineConfig({ site: DOMAIN, integrations: [ + preact({ compat: true }), sitemap(), ], image: { diff --git a/apps/astro/package.json b/apps/astro/package.json index 585012e..988e1eb 100644 --- a/apps/astro/package.json +++ b/apps/astro/package.json @@ -12,6 +12,7 @@ }, "dependencies": { "@astrojs/check": "^0.9.4", + "@astrojs/preact": "^3.5.3", "@astrojs/sitemap": "^3.2.0", "@astrojs/vercel": "^7.8.1", "@sanity/client": "^6.22.1", @@ -28,5 +29,9 @@ "eslint-plugin-astro": "^1.2.4", "eslint-plugin-jsx-a11y": "^6.10.0", "sass": "^1.79.5" + }, + "overrides": { + "react": "bun:@preact/compat@latest", + "react-dom": "bun:@preact/compat@latest" } } diff --git a/apps/astro/src/components/ui/button/button.module.scss b/apps/astro/src/components/ui/button/button.module.scss new file mode 100644 index 0000000..95d6994 --- /dev/null +++ b/apps/astro/src/components/ui/button/button.module.scss @@ -0,0 +1,118 @@ +.button { + font-size: var(--typography-body-m, 14px); + position: relative; + overflow: hidden; + z-index: 2; + border-radius: 4px; + display: inline-flex; + justify-content: center; + align-items: center; + min-height: 3rem; + padding: 0 clamp(1rem, calc(1rem + 1vw / 0.48), 2rem); + transition: transform 500ms var(--easing); + @media (max-width: 499px) { + width: 100%; + } + &::before { + content: ''; + width: 110%; + aspect-ratio: 1/1; + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + z-index: -1; + background-image: conic-gradient( + var(--primary-500, #064040) 79%, + #90f4e8 87%, + #90f4e8 92%, + var(--primary-500, #064040) 100% + ); + animation: rotate 2.5s linear infinite; + animation-play-state: paused; + transition: opacity 500ms var(--easing); + @keyframes rotate { + from { + transform: translate(-50%, -50%) rotate(0deg); + } + to { + transform: translate(-50%, -50%) rotate(360deg); + } + } + } + &::after { + content: ''; + position: absolute; + z-index: -1; + left: 1px; + top: 1px; + right: 1px; + bottom: 1px; + border-radius: inherit; + background: linear-gradient(266deg, #0b0f0d, #011310, #001f1b); + } + .content { + display: inline-flex; + align-items: center; + gap: 0.5rem; + z-index: 2; + border-radius: inherit; + } + &[data-theme='primary'] { + span { + background: linear-gradient(266deg, #2dd282, #90f4e8); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + } + .content { + &::before { + content: ''; + position: absolute; + z-index: -1; + left: 0; + top: 0; + right: 0; + bottom: 0; + background: + linear-gradient(var(--neutral-900, #000103), var(--neutral-900, #000103)) padding-box, + linear-gradient(266deg, #2dd282, #90f4e8) border-box; + border: 1px solid rgba(255, 255, 255, 0); + border-radius: inherit; + transition: opacity 500ms var(--easing); + } + } + } + &[data-theme='secondary'] { + border-radius: 48px; + &::before { + opacity: 0; + } + } + &:disabled { + opacity: 0.62; + pointer-events: none; + } + img { + width: 28px; + height: 28px; + } + &:hover { + &::before { + animation-play-state: running; + @media (prefers-reduced-motion) { + animation-play-state: paused; + } + opacity: 1; + } + .content { + &::before { + opacity: 0; + } + } + } + &:active { + transition: none; + transform: scale(0.99); + } +} diff --git a/apps/astro/src/components/ui/button/button.tsx b/apps/astro/src/components/ui/button/button.tsx new file mode 100644 index 0000000..5a4e896 --- /dev/null +++ b/apps/astro/src/components/ui/button/button.tsx @@ -0,0 +1,32 @@ +import type { ImageDataProps } from '../image'; +import styles from './button.module.scss' + +export type Props = React.HTMLAttributes & React.ButtonHTMLAttributes & { + text?: string | React.ReactNode + children: React.ReactNode; + theme?: 'primary' | 'secondary' + linkType?: 'external' | 'internal' + href?: string + img?: ImageDataProps + className?: string +} + +export default function Button({ children, text, theme = 'primary', linkType = 'internal', href, img, className, ...props }: Props) { + const Element = href ? 'a' : 'button' + const isExternal = linkType === 'external' + const renderedProps = { + ...(href && { href }), + ...(isExternal && { target: '_blank', rel: 'noreferrer' }), + 'data-theme': theme, + className: `${styles.button}${className ? ` ${className}` : ''}`, + ...props, + } + + return ( + +
+ {children} +
+
+ ) +} diff --git a/apps/astro/src/components/ui/button/index.astro b/apps/astro/src/components/ui/button/index.astro new file mode 100644 index 0000000..652e7b6 --- /dev/null +++ b/apps/astro/src/components/ui/button/index.astro @@ -0,0 +1,36 @@ +--- +import Image from '@/components/ui/image' +import Button, { type Props as ButtonDataProps } from './button' + +type Props = ButtonDataProps + +const { ...props } = Astro.props + +const svgId = `arrow-icon-${Math.random().toString(36).slice(2, 9)}` +--- + + diff --git a/apps/astro/src/components/ui/button/index.ts b/apps/astro/src/components/ui/button/index.ts new file mode 100644 index 0000000..950a8d8 --- /dev/null +++ b/apps/astro/src/components/ui/button/index.ts @@ -0,0 +1,13 @@ +import { ImageDataQuery } from '../image'; +export { default } from './index.astro'; +export { type Props as ButtonDataProps } from './button'; + +export const ButtonDataQuery = (name: string) => ` + ${name} { + text, + theme, + linkType, + "href": select(linkType == "internal" => internal -> slug.current, linkType == "external" => external, "#"), + ${ImageDataQuery('img')} + }, +` diff --git a/apps/astro/src/global/global.scss b/apps/astro/src/global/global.scss index e412b74..0eeeac1 100644 --- a/apps/astro/src/global/global.scss +++ b/apps/astro/src/global/global.scss @@ -1,19 +1,19 @@ @font-face { - font-family: 'Poppins'; + font-family: 'KryptoPoppins'; src: - url('/fonts/Poppins-Regular.woff2') format('woff2'), - url('/fonts/Poppins-Regular.woff') format('woff'); + url('/fonts/KryptoPoppins-Regular.woff2') format('woff2'), + url('/fonts/KryptoPoppins-Regular.woff') format('woff'); font-weight: 400; font-display: swap; font-style: normal; } @font-face { - font-family: 'Poppins Fallback'; + font-family: 'KryptoPoppins Fallback'; src: local('Arial'); - size-adjust: 109%; - ascent-override: 100%; - descent-override: 27%; - line-gap-override: 5%; + ascent-override: 93.76%; + descent-override: 31.25%; + line-gap-override: 8.93%; + size-adjust: 111.99%; } *, @@ -144,7 +144,7 @@ --menu-text: var(--neutral-200); --background: var(--neutral-900); - --easing: cubic-bezier(0.215, 0.61, 0.355, 1); + --easing: cubic-bezier(0.19, 1, 0.22, 1); // Margins --page-margin: clamp(1rem, calc(2vw / 0.48), 2rem); @@ -230,7 +230,7 @@ img { } :focus-visible { outline: 2px solid var(--neutral-200, #f0f7f7); - outline-offset: 3px; + outline-offset: 5px; } html, @@ -239,6 +239,9 @@ body { } html { scroll-behavior: smooth; + @media (prefers-reduced-motion) { + scroll-behavior: none; + } scroll-padding-top: 123px; &::-webkit-scrollbar { width: 16px; @@ -257,7 +260,7 @@ body { -webkit-tap-highlight-color: transparent; background-color: var(--neutral-900, #000103); color: var(--neutral-200, #f0f7f7); - font-family: 'Poppins', 'Poppins Fallback', sans-serif; + font-family: 'KryptoPoppins', 'KryptoPoppins Fallback', sans-serif; font-size: var(--typography-body-xl, 1rem); line-height: 175%; letter-spacing: 0.005em; @@ -380,3 +383,11 @@ li { align-items: center; gap: clamp(1rem, calc(1.5vw / 0.48), 2rem); } + +.gradient-thumbnail { + background: + linear-gradient(var(--neutral-900), var(--neutral-900)) padding-box, + linear-gradient(266deg, #2dd282, #90f4e8) border-box; + border: 1px solid rgba(255, 255, 255, 0); + border-radius: 50%; +} diff --git a/apps/astro/src/pages/index.astro b/apps/astro/src/pages/index.astro index 0b281c6..2565b60 100644 --- a/apps/astro/src/pages/index.astro +++ b/apps/astro/src/pages/index.astro @@ -1,12 +1,28 @@ --- import Layout from '@/src/layouts/Layout.astro' import metadataFetch from '@/utils/metadata.fetch' +import sanityFetch from '@/utils/sanity.fetch' +import Button, { ButtonDataQuery, type ButtonDataProps } from '@/components/ui/button' const metadata = await metadataFetch('Index_Page') + +type QueryProps = { + button: ButtonDataProps +} + +const data = await sanityFetch({ + query: ` + *[_type == "Index_Page"][0] { + ${ButtonDataQuery('button')} + } + `, +}) --- -

Index special Page

+

❧ Index special Page

+

Zażółć gęślą jaźń

+

❧ Zażółć gęślą jaźń Zażółć gęślą

Lorem ipsum dolor sit amet consectetur adipisicing elit. Deserunt cum expedita ad distinctio temporibus corrupti laboriosam cupiditate, impedit dolore sapiente magni neque quaerat facilis, est odio consequuntur enim @@ -16,54 +32,16 @@ const metadata = await metadataFetch('Index_Page') magni qui deleniti ducimus. Quam accusamus eos id fugiat soluta corrupti modi maiores ab perspiciatis? Asperiores, sunt aliquam rerum ipsum magnam perferendis vero sapiente id sint unde dolor adipisci repudiandae.

-

Index special Page

-

Index special Page

-

- Lorem ipsum, dolor sit amet consectetur adipisicing elit. Dolorem quas dignissimos voluptatem, in dolore assumenda - dolores totam provident distinctio beatae modi nemo iure, voluptatibus, cumque laborum officia quod ut quisquam - deserunt sint rerum sapiente necessitatibus maxime. Voluptatum optio officiis sint pariatur repudiandae quos - repellat, assumenda deserunt enim! Numquam, reiciendis perferendis! Ab repudiandae maxime vitae, iusto corrupti - veritatis. Optio qui eos error veniam? Doloremque, id culpa omnis, sint temporibus explicabo provident possimus, - deleniti unde molestias incidunt. Corporis unde corrupti totam impedit ipsa architecto temporibus doloribus laborum - illo vero necessitatibus, laboriosam mollitia eaque? Deserunt nisi vel debitis repudiandae expedita error cum amet - voluptate repellendus libero? A aperiam error consectetur quaerat expedita corrupti laboriosam, at cum itaque id - repellendus autem quos consequatur praesentium sint voluptatem officia culpa. Earum tempora inventore, vitae neque - id consequuntur possimus ullam excepturi quisquam minus perspiciatis similique praesentium modi architecto ut, quasi - ratione fugiat dolorem corrupti cupiditate. Ut temporibus debitis eligendi quis et fugiat qui, voluptas, amet, earum - blanditiis aperiam id ipsa? Quibusdam perferendis pariatur, quo mollitia, ab odit adipisci accusantium optio maiores - repellendus cum, minima expedita libero sit. Omnis, dolorem unde doloremque sit iste ea alias necessitatibus vero - soluta odio quo consequatur et, nam minus quisquam iure. Error, beatae assumenda? Nulla, fuga explicabo! Dolore - repellat sequi praesentium beatae laudantium accusamus minus ipsam, officiis modi assumenda qui tempore? Voluptatem - ipsum assumenda dolorum, similique, beatae eius molestias nulla esse, dolore autem facere rem repellendus odit - minima? Atque obcaecati maxime nisi laboriosam excepturi repudiandae cumque quo possimus quae. Nostrum officia - impedit, suscipit iure autem dolor soluta sunt quas quidem totam eum, omnis provident recusandae odit vero nam - voluptatem delectus! Mollitia eos non similique animi rerum ducimus quasi! Repellendus assumenda omnis ut quam - voluptatibus, sapiente, dolorem consectetur voluptatum veniam debitis pariatur! Nemo architecto eum debitis, aperiam - rerum odit sequi doloremque a, voluptate fuga quibusdam hic ea? Quasi, libero. Commodi modi vel veritatis unde - quisquam ab atque velit maiores consequuntur fugit a at beatae, nobis voluptas non quos iusto labore fugiat illo - delectus ipsum veniam. Quidem ea voluptatem tempore quisquam. Id sequi, ducimus est consectetur beatae laboriosam - nisi animi adipisci rerum aliquid sit illum quos sunt. Ea nihil aperiam, magnam earum vitae quasi numquam nemo? - Eveniet voluptates vitae repellat maiores ex ratione velit! Accusamus sit perferendis libero quas magnam laudantium - distinctio ut qui ad ducimus ipsa dolorum neque, sequi vero facere iusto nulla eligendi totam! Voluptatum odio - eligendi beatae voluptatem blanditiis ea ad nisi a quas! Magni similique qui, numquam velit accusamus deserunt - mollitia cumque debitis totam eaque facere vel illum consectetur quisquam quod cupiditate ut? Architecto, - perferendis. Tempora similique facere repudiandae delectus! Fugiat perspiciatis dolorem veniam debitis odio aut - molestias eligendi, ducimus earum qui nobis, nisi labore itaque tempora tenetur repudiandae blanditiis suscipit - dicta accusantium autem dolore! Dolorum sapiente minus obcaecati corrupti labore cumque adipisci laudantium amet - veritatis, eveniet expedita dolore quaerat soluta eos, ipsum, eligendi repellat. Nam dolore animi a quae enim vel - corporis, ex autem quasi, sit quos ipsum rem, repudiandae porro nulla soluta esse delectus non amet. Illum, - molestiae. -

-

Index special Page

-
Index special Page
-
Index special Page
-

- Lorem ipsum, dolor sit amet consectetur adipisicing elit. Perspiciatis aspernatur voluptatum provident nihil, rem - asperiores odit minus eveniet, suscipit minima quod delectus? Obcaecati ea nisi ducimus eveniet natus porro nemo - atque accusamus. Reprehenderit labore, voluptatem impedit sunt soluta dolores eligendi molestias iusto cum fuga - dolorem dolore natus. Dignissimos et placeat, quisquam eaque modi soluta ex tenetur commodi. Repellendus delectus - doloribus repudiandae, accusamus quae at hic, dicta ad architecto veniam distinctio illum quisquam, nobis - cupiditate! Rerum hic assumenda expedita ex voluptas corporis accusantium minima excepturi quod asperiores debitis - eveniet optio consequuntur iste earum corrupti aperiam sit inventore cum illum, alias aliquam! -

+ +
+ +
+ + diff --git a/apps/sanity/schema/singleTypes/Index_Page.ts b/apps/sanity/schema/singleTypes/Index_Page.ts index 693b9ec..0d5af7a 100644 --- a/apps/sanity/schema/singleTypes/Index_Page.ts +++ b/apps/sanity/schema/singleTypes/Index_Page.ts @@ -12,6 +12,11 @@ export default defineType({ icon: () => '🏠', fields: [ ...defineSlugForDocument({ slug: slug }), + defineField({ + name: 'button', + type: 'button', + title: 'Button', + }), defineField({ name: 'components', type: 'components', diff --git a/apps/sanity/structure/schema-types.ts b/apps/sanity/structure/schema-types.ts index 98c8da6..961bfc1 100644 --- a/apps/sanity/structure/schema-types.ts +++ b/apps/sanity/structure/schema-types.ts @@ -24,13 +24,13 @@ const components = [ ]; // UI Components -import cta from '../schema/ui/cta'; +import button from '../schema/ui/button'; import seo from '../schema/ui/seo'; import PortableText from '../schema/ui/portable-text'; import Heading from '../schema/ui/portable-text/Heading'; const ui = [ - cta, + button, seo, PortableText, Heading, diff --git a/bun.lockb b/bun.lockb index 8d7ea9c65e475f665591768f4c0fc10e28e02b4b..d9c133dddd2ccf77e2c72d33ff3b0b072ad067c0 100755 GIT binary patch delta 33212 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