diff --git a/.gitignore b/.gitignore index 5224a3237..d6a3c9c1f 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ node_modules .mf .rollup.cache tsconfig.tsbuildinfo +.nx/cache # IDE - VSCode .vscode/* diff --git a/apps/website/public/images/astro-cli.webp b/apps/website/public/images/astro-cli.webp new file mode 100644 index 000000000..ab2b7be85 Binary files /dev/null and b/apps/website/public/images/astro-cli.webp differ diff --git a/apps/website/public/images/qwik-city-cli.webp b/apps/website/public/images/qwik-city-cli.webp new file mode 100644 index 000000000..b310e83ed Binary files /dev/null and b/apps/website/public/images/qwik-city-cli.webp differ diff --git a/apps/website/public/images/qwik-logo.svg b/apps/website/public/images/qwik-logo.svg new file mode 100644 index 000000000..d9d60b0d4 --- /dev/null +++ b/apps/website/public/images/qwik-logo.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/apps/website/public/images/qwikdev-astro-cli.webp b/apps/website/public/images/qwikdev-astro-cli.webp new file mode 100644 index 000000000..92f118487 Binary files /dev/null and b/apps/website/public/images/qwikdev-astro-cli.webp differ diff --git a/apps/website/src/components/all-contributors/all-contributors.tsx b/apps/website/src/components/all-contributors/all-contributors.tsx new file mode 100644 index 000000000..deef6fcda --- /dev/null +++ b/apps/website/src/components/all-contributors/all-contributors.tsx @@ -0,0 +1,1097 @@ +import { component$, useStyles$ } from '@builder.io/qwik'; + +export const AllContributors = component$(() => { + useStyles$(` + .image-container img { + min-width: 100px; + overflow-wrap: break-word; + } + + @media (max-width: 600px) { + tr { + display: flex; + flex-wrap: wrap; + } + td { + flex: 0 0 50%; + max-width: 50%; + } + + img { + max-width: 100%; + height: auto; + } + } + `); + + return ( +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + Shai Reznik +
+ + Shai Reznik + +
+
+ + πŸ’» + {' '} + + ⚠️ + {' '} + + πŸš‡ + {' '} + + πŸ“– + {' '} + + 🚧 + {' '} + + πŸ‘€ + {' '} + + πŸ€” + +
+ + Gil Fink +
+ + Gil Fink + +
+
+ + πŸš‡ + {' '} + + ⚠️ + {' '} + + πŸ’» + {' '} + + πŸ“– + {' '} + + πŸ€” + {' '} + + πŸ‘€ + +
+ + Giorgio Boa +
+ + Giorgio Boa + +
+
+ + πŸ’» + {' '} + + ⚠️ + {' '} + + πŸ“– + {' '} + + πŸ€” + {' '} + + πŸ‘€ + +
+ + John Reemar Dela Rosa +
+ + John Reemar Dela Rosa + +
+
+ + 🚧 + +
+ + Glenn Becker +
+ + Glenn Becker + +
+
+ + πŸ’» + {' '} + + ⚠️ + {' '} + + πŸ“– + {' '} + + πŸ€” + {' '} + + πŸ‘€ + +
+ + MichaΕ‚ WΓ³jcik +
+ + MichaΕ‚ WΓ³jcik + +
+
+ + πŸ’» + {' '} + + πŸ“– + +
+ + Shiroi Negai +
+ + Shiroi Negai + +
+
+ + πŸ’» + {' '} + + πŸ€” + {' '} + + πŸ› + {' '} + + ️️️️♿️ + +
+ + Fabio Biondi +
+ + Fabio Biondi + +
+
+ + πŸ’» + {' '} + + πŸ€” + +
+ + Obvio +
+ + Obvio + +
+
+ + πŸ’» + {' '} + + πŸ€” + {' '} + + πŸ“– + {' '} + + πŸ› + {' '} + + ️️️️♿️ + +
+ + Leonardo Montini +
+ + Leonardo Montini + +
+
+ + πŸ’» + {' '} + + πŸ› + +
+ + Itai Mizlish +
+ + Itai Mizlish + +
+
+ + πŸ’» + {' '} + + πŸ“– + +
+ + Luis Beqja +
+ + Luis Beqja + +
+
+ + πŸ’» + +
+ + Riccardo Vettore +
+ + Riccardo Vettore + +
+
+ + πŸ’» + +
+ + Ken aka Frosty +
+ + Ken aka Frosty + +
+
+ + πŸ’» + {' '} + + πŸ› + +
+ + Alessandro Sebastiani +
+ + Alessandro Sebastiani + +
+
+ + πŸ’» + {' '} + + πŸ“– + {' '} + + πŸ› + +
+ + Wahyu Febrianto +
+ + Wahyu Febrianto + +
+
+ + πŸ’» + {' '} + + πŸ› + +
+ + Dmitriy Stepanenko +
+ + Dmitriy Stepanenko + +
+
+ + 🚧 + +
+ + Yishay Hazan +
+ + Yishay Hazan + +
+
+ + πŸ’» + +
+ + Rossella Mascia +
+ + Rossella Mascia + +
+
+ + πŸ’» + +
+ + Sai Srikar Dumpeti +
+ + Sai Srikar Dumpeti + +
+
+ + πŸ’» + +
+ + Thomas LepΓ©rou +
+ + Thomas LepΓ©rou + +
+
+ + πŸ“– + {' '} + + πŸ’» + +
+ + Patryk Godlewski +
+ + Patryk Godlewski + +
+
+ + πŸ› + {' '} + + πŸ’» + +
+ + Pranit Yawalkar +
+ + Pranit Yawalkar + +
+
+ + πŸ› + {' '} + + πŸ’» + +
+ + Greg Ederer +
+ + Greg Ederer + +
+
+ + πŸ’» + +
+ + Naor Peled +
+ + Naor Peled + +
+
+ + ⚠️ + {' '} + + πŸ’» + +
+ + Igal Klebanov +
+ + Igal Klebanov + +
+
+ + ⚠️ + {' '} + + πŸ’» + +
+ + Jack Shelton +
+ + Jack Shelton + +
+
+ + πŸ’» + {' '} + + πŸ“– + +
+ + Vasu Singh +
+ + Vasu Singh + +
+
+ + πŸ’» + +
+ + Wout Mertens +
+ + Wout Mertens + +
+
+ + πŸ’» + {' '} + + πŸ”¬ + {' '} + + πŸ€” + {' '} + + ⚠️ + {' '} + + πŸ“– + +
+ + Zankel-Engineering +
+ + Zankel-Engineering + +
+
+ + πŸ’» + {' '} + + ⚠️ + {' '} + + πŸ› + {' '} + + ️️️️♿️ + +
+ + Adam +
+ + Adam + +
+
+ + πŸ“– + {' '} + + πŸ› + +
+ + Georgi Parlakov +
+ + Georgi Parlakov + +
+
+ + πŸ’» + {' '} + + πŸ› + {' '} + + 🚧 + +
+ + Noelia +
+ + Noelia + +
+
+ + πŸ’» + {' '} + + πŸ€” + {' '} + + 🚧 + +
+ + Alex Tocar +
+ + Alex Tocar + +
+
+ + πŸ’» + {' '} + + πŸ€” + {' '} + + 🚧 + +
+ + MaΓ―eul +
+ + MaΓ―eul + +
+
+ + πŸ’» + {' '} + + πŸ€” + {' '} + + 🚧 + +
+ + TheMcnafaha +
+ + TheMcnafaha + +
+
+ + πŸ’» + {' '} + + πŸ€” + {' '} + + 🚧 + +
+ + Matteo Pietro Dazzi +
+ + Matteo Pietro Dazzi + +
+
+ + πŸ“– + {' '} + + 🚧 + +
+
+ ); +}); diff --git a/apps/website/src/components/code-copy/code-copy.tsx b/apps/website/src/components/code-copy/code-copy.tsx index b79840bfd..db1f13655 100644 --- a/apps/website/src/components/code-copy/code-copy.tsx +++ b/apps/website/src/components/code-copy/code-copy.tsx @@ -7,10 +7,11 @@ import { twMerge } from 'tailwind-merge'; export type CodeCopyProps = OmitSignalClass & { code?: string; + icon?: boolean; }; export const CodeCopy = component$( - ({ code = '', class: outsideClass, ...restOfProps }: CodeCopyProps) => { + ({ icon = false, code = '', class: outsideClass, ...restOfProps }: CodeCopyProps) => { const copied = useSignal(false); return ( @@ -30,8 +31,49 @@ export const CodeCopy = component$( }, 4000); }} > - {!copied.value ? 'Copy' : 'Copied!'} + {!icon && (!copied.value ? 'Copy' : 'Copied!')} + {icon && (!copied.value ? : )} ); }, ); + +export function CopyIcon(props: QwikIntrinsicElements['svg'], key: string) { + return ( + + + + + ); +} + +export function ClipboardCheck(props: QwikIntrinsicElements['svg'], key: string) { + return ( + + + + ); +} diff --git a/apps/website/src/components/code-example/code-example-container.tsx b/apps/website/src/components/code-example/code-example-container.tsx index aa20a7be6..064f6e5a2 100644 --- a/apps/website/src/components/code-example/code-example-container.tsx +++ b/apps/website/src/components/code-example/code-example-container.tsx @@ -4,7 +4,7 @@ import { Highlight } from '../highlight/highlight'; export const CodeExampleContainer = component$((props: { code: string }) => { return (
diff --git a/apps/website/src/components/code-snippet/code-snippet.tsx b/apps/website/src/components/code-snippet/code-snippet.tsx index 01ba53c79..4e4372abe 100644 --- a/apps/website/src/components/code-snippet/code-snippet.tsx +++ b/apps/website/src/components/code-snippet/code-snippet.tsx @@ -34,7 +34,7 @@ export const CodeSnippet = component$(({ name }) => { }); return ( -
+
); diff --git a/apps/website/src/components/feature-list/feature-list.tsx b/apps/website/src/components/feature-list/feature-list.tsx new file mode 100644 index 000000000..5b47f92f0 --- /dev/null +++ b/apps/website/src/components/feature-list/feature-list.tsx @@ -0,0 +1,24 @@ +import { component$ } from '@builder.io/qwik'; +import { CheckIcon } from '../icons/Check'; + +type FeatureListProps = { + features: string[]; +}; + +export const FeatureList = component$((props: FeatureListProps) => { + return ( +
    + {props.features.map((descriptor) => { + return ( +
  • + + {descriptor} +
  • + ); + })} +
+ ); +}); diff --git a/apps/website/src/components/header/header.tsx b/apps/website/src/components/header/header.tsx index 5514cf567..1d69e23a3 100644 --- a/apps/website/src/components/header/header.tsx +++ b/apps/website/src/components/header/header.tsx @@ -64,7 +64,7 @@ export default component$( return (
{kitSignal.value?.name} Kit - v.{kitSignal.value?.version} + + {' '} + v{kitSignal.value?.version}{' '} +
)} diff --git a/apps/website/src/components/highlight/highlight.tsx b/apps/website/src/components/highlight/highlight.tsx index 5b06f05aa..6ac9fca0d 100644 --- a/apps/website/src/components/highlight/highlight.tsx +++ b/apps/website/src/components/highlight/highlight.tsx @@ -66,7 +66,7 @@ export const Highlight = component$(
diff --git a/apps/website/src/components/icons/AstroLogo.tsx b/apps/website/src/components/icons/AstroLogo.tsx new file mode 100644 index 000000000..c19178777 --- /dev/null +++ b/apps/website/src/components/icons/AstroLogo.tsx @@ -0,0 +1,16 @@ +import { component$ } from '@builder.io/qwik'; + +export default component$((props) => { + return ( + + + + + ); +}); diff --git a/apps/website/src/components/icons/Check.tsx b/apps/website/src/components/icons/Check.tsx new file mode 100644 index 000000000..95d33dd63 --- /dev/null +++ b/apps/website/src/components/icons/Check.tsx @@ -0,0 +1,19 @@ +import { QwikIntrinsicElements } from '@builder.io/qwik'; + +export function CheckIcon(props: QwikIntrinsicElements['svg'], key: string) { + return ( + + + + + + + ); +} diff --git a/apps/website/src/components/icons/CollapsibleIcon.tsx b/apps/website/src/components/icons/CollapsibleIcon.tsx new file mode 100644 index 000000000..ddcaf2349 --- /dev/null +++ b/apps/website/src/components/icons/CollapsibleIcon.tsx @@ -0,0 +1,18 @@ +import { type QwikIntrinsicElements } from '@builder.io/qwik'; + +export function CollapsibleIcon(props: QwikIntrinsicElements['svg']) { + return ( + + + + ); +} diff --git a/apps/website/src/components/icons/QwikLogo.tsx b/apps/website/src/components/icons/QwikLogo.tsx new file mode 100644 index 000000000..108d662a4 --- /dev/null +++ b/apps/website/src/components/icons/QwikLogo.tsx @@ -0,0 +1,22 @@ +import { component$ } from '@builder.io/qwik'; + +export default component$((props) => { + return ( + + + + + + ); +}); diff --git a/apps/website/src/components/mdx-components/index.tsx b/apps/website/src/components/mdx-components/index.tsx index e0131509f..38ba0f373 100644 --- a/apps/website/src/components/mdx-components/index.tsx +++ b/apps/website/src/components/mdx-components/index.tsx @@ -17,7 +17,7 @@ export const components: Record = { > >(({ __rawString__, ...props }) => { return ( -
+
; + case NoteStatus.Warning: + return ; + case NoteStatus.Success: + return ; + case NoteStatus.Caution: + return ; + default: + return ; + } +} + +function getBackgroundByStatus(status?: NoteStatus) { + switch (status) { + case NoteStatus.Info: + return 'bg-[#ECDDFD] border-qwikui-purple-500 dark:bg-[#0C2944] border-l-2 dark:border-qwikui-blue-700 mb-4 rounded-lg block'; + case NoteStatus.Warning: + return 'bg-[#FBF0CD] dark:bg-[#3B3623] border-yellow-500 border-l-2 dark:border-yellow-500 mb-4 rounded-lg block'; + case NoteStatus.Success: + return 'dark:bg-[#103331] bg-[#D2F4DF] border-green-500 border-l-2 dark:border-green-600 mb-4 rounded-lg block'; + case NoteStatus.Caution: + return 'bg-[#F8D3D3] border-red-600 dark:bg-[#311727] border-l-2 dark:border-red-700 mb-4 rounded-lg block'; + default: + return 'dark:bg-[#0C2944] border-l-2 dark:border-qwikui-blue-700 mb-4 rounded-lg block'; + } +} + +export const Note = component$((props: NoteProps) => { + return ( + + ); +}); + +export function InfoIcon(props: QwikIntrinsicElements['svg'], key: string) { + return ( + + + + + + + ); +} + +export function WarningIcon(props: QwikIntrinsicElements['svg'], key: string) { + return ( + + + + + + + ); +} + +export function SuccessIcon(props: QwikIntrinsicElements['svg'], key: string) { + return ( + + + + + + + ); +} + +export function CautionIcon(props: QwikIntrinsicElements['svg'], key: string) { + return ( + + + + + + + ); +} diff --git a/apps/website/src/components/preview-code-example/preview-code-example-tabs-deprecated.tsx b/apps/website/src/components/preview-code-example/preview-code-example-tabs-deprecated.tsx index 4b5803460..81f1ece17 100644 --- a/apps/website/src/components/preview-code-example/preview-code-example-tabs-deprecated.tsx +++ b/apps/website/src/components/preview-code-example/preview-code-example-tabs-deprecated.tsx @@ -16,14 +16,14 @@ export const PreviewCodeExampleTabsDeprecated = component$((props: { code?: stri return ( - + Preview - + Code diff --git a/apps/website/src/components/preview-code-example/preview-code-example-tabs.tsx b/apps/website/src/components/preview-code-example/preview-code-example-tabs.tsx index 686575ecd..a3d7aff7b 100644 --- a/apps/website/src/components/preview-code-example/preview-code-example-tabs.tsx +++ b/apps/website/src/components/preview-code-example/preview-code-example-tabs.tsx @@ -18,24 +18,24 @@ export const PreviewCodeExampleTabs = component$((props: PreviewCodeExampleProps return ( - - + + Preview - + Code - +
- - + +
); diff --git a/apps/website/src/components/preview-code-example/preview-code-example-vertical.tsx b/apps/website/src/components/preview-code-example/preview-code-example-vertical.tsx index 4a7645621..a17a34b63 100644 --- a/apps/website/src/components/preview-code-example/preview-code-example-vertical.tsx +++ b/apps/website/src/components/preview-code-example/preview-code-example-vertical.tsx @@ -4,7 +4,7 @@ import { PreviewCodeExampleProps } from './preview-code-example-props.type'; export const PreviewCodeExampleVertical = component$((props: PreviewCodeExampleProps) => { return ( -
+

diff --git a/apps/website/src/components/showcase/showcase.tsx b/apps/website/src/components/showcase/showcase.tsx index 7d30e6934..b3943344f 100644 --- a/apps/website/src/components/showcase/showcase.tsx +++ b/apps/website/src/components/showcase/showcase.tsx @@ -55,7 +55,7 @@ export const Showcase = component$(({ name, ...props }) => { return ( diff --git a/apps/website/src/components/status-banner/status-banner.tsx b/apps/website/src/components/status-banner/status-banner.tsx index 5c4852d9a..a5995854f 100644 --- a/apps/website/src/components/status-banner/status-banner.tsx +++ b/apps/website/src/components/status-banner/status-banner.tsx @@ -113,7 +113,7 @@ export const StatusBanner = component$((props: StatusBannerProps) => { class={`${getBackgroundByStatus( props.status, )} normal-state shadow-light-medium dark:shadow-dark-medium - border-qwikui-blue-200 dark:border-qwikui-purple-200 relative rounded-xl border-[1px] px-6 py-4 text-white md:flex-row md:items-center`} + border-qwikui-blue-200 dark:border-qwikui-purple-200 relative mx-[-24px] rounded-xl border-[1px] px-8 py-4 text-white md:flex-row md:items-center lg:mx-[-32px]`} style={{ marginBottom: `${marginBottom}px` }} > {getMessageByStatus(props.status)} diff --git a/apps/website/src/global.css b/apps/website/src/global.css index 3b90af01e..74dd86090 100644 --- a/apps/website/src/global.css +++ b/apps/website/src/global.css @@ -140,26 +140,19 @@ border: 0.35rem solid transparent; } - .code-example-gradient { - background: linear-gradient( - to bottom, - var(--qwikui-slate-900), - var(--qwikui-slate-800) - ); - } - .dark .code-example-gradient { - background: linear-gradient( - to bottom, - var(--qwikui-slate-800), - var(--qwikui-slate-900) - ); - } - /* no horizontal overflow on code snippets */ .tab-size pre { white-space: pre-wrap; background: transparent !important; } + + .note-link a { + border-bottom: 1px solid var(--qwikui-slate-950) !important; + } + + .dark .note-link a { + border-bottom: 1px solid white !important; + } } :root { diff --git a/apps/website/src/routes/docs.css b/apps/website/src/routes/docs.css index 4b95d7ec9..c4f834298 100644 --- a/apps/website/src/routes/docs.css +++ b/apps/website/src/routes/docs.css @@ -8,6 +8,11 @@ this should not affect the styles inside of the tabpanel A.K.A the components */ + + table a { + @apply border-none; + } + & > { p { @apply mb-6; @@ -18,7 +23,7 @@ } h2 { - @apply mb-8 mt-20 border-b-[1px] border-slate-300 pb-2 text-2xl font-extrabold dark:border-slate-700; + @apply mb-8 mt-20 scroll-mt-32 border-b-[1px] border-slate-300 pb-2 text-2xl font-extrabold dark:border-slate-700; } h3 { @@ -47,11 +52,7 @@ } a { - @apply border-qwikui-blue-500 dark:border-qwikui-purple-400 ease-step hover:border-qwikui-blue-600 border-b-[1.5px] font-semibold transition-colors duration-300; - } - - code { - @apply bg-transparent; + @apply border-qwikui-blue-600 dark:border-qwikui-purple-400 ease-step hover:border-qwikui-blue-600 border-b-[1.5px] pb-[1.5px] font-semibold transition transition-colors duration-300; } p code { diff --git a/apps/website/src/routes/docs/headless/(getting-started)/contributing/index.mdx b/apps/website/src/routes/docs/headless/(getting-started)/contributing/index.mdx index caee3de91..15c7877d7 100644 --- a/apps/website/src/routes/docs/headless/(getting-started)/contributing/index.mdx +++ b/apps/website/src/routes/docs/headless/(getting-started)/contributing/index.mdx @@ -2,7 +2,7 @@ title: 'Qwik UI - Contributing' --- -# Contributing to Qwik UI Fluffy +# Contributing to Qwik UI We welcome and appreciate contributions from the community! diff --git a/apps/website/src/routes/docs/headless/(getting-started)/install/index.mdx b/apps/website/src/routes/docs/headless/(getting-started)/install/index.mdx deleted file mode 100644 index 73633de36..000000000 --- a/apps/website/src/routes/docs/headless/(getting-started)/install/index.mdx +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: 'Qwik UI | Headless Kit - Installation' ---- - -# Installation - -To get started with the Headless Kit for Qwik UI, run the following command to install the Headless Kit via npm: - -```bash -npm install -D @qwik-ui/headless -``` - -
- -That's it! The Headless Kit is now installed and ready for use in your Qwik project. - -Now you can start building your custom-designed, accessible Qwik web applications using the Qwik UI Headless Kit. diff --git a/apps/website/src/routes/docs/headless/(getting-started)/introduction/index.mdx b/apps/website/src/routes/docs/headless/(getting-started)/introduction/index.mdx deleted file mode 100644 index 7bbe55421..000000000 --- a/apps/website/src/routes/docs/headless/(getting-started)/introduction/index.mdx +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: 'Qwik UI | Headless Kit - Introduction' ---- - -import ImgQwikUiHeadlessHero from '/public/images/qwik-ui-headless-hero.webp?jsx'; - -# Headless Kit - -## Accessible, Unstyled Qwik UI Components - -Welcome to the Headless Kit, a collection of accessible, unstyled components by Qwik UI. The Headless Kit is perfect for developers who want to build their web applications with custom styles while maintaining a strong focus on accessibility. - -### Why Choose the Headless Kit? - -The Headless Kit allows you to apply your own CSS, making it easy to achieve the look and feel you desire for your Qwik web applications. And you're getting all of the logic and behavior out of the box! - -### Accessibility at its Core - -Accessibility is at the heart of the Headless Kit. Each component in the library has been meticulously crafted to meet the highest accessibility standards, ensuring that your web applications are inclusive and cater to users of all abilities. By choosing the Headless Kit, you're taking an important step towards creating a more accessible web. - -### Seamless Integration with Qwik - -The Headless Kit is designed to work hand-in-hand with the Qwik framework. This means that, as a developer, you can enjoy the performance benefits and SEO advantages of Qwik while having complete control over the appearance of your web application. It's the best of both worlds! - - diff --git a/apps/website/src/routes/docs/headless/accordion/index.mdx b/apps/website/src/routes/docs/headless/accordion/index.mdx index 15c0a0a25..0e1198030 100644 --- a/apps/website/src/routes/docs/headless/accordion/index.mdx +++ b/apps/website/src/routes/docs/headless/accordion/index.mdx @@ -3,6 +3,8 @@ title: Qwik UI | Accordion --- import { statusByComponent } from '~/_state/component-statuses'; +import { FeatureList } from '~/components/feature-list/feature-list'; +import { Note } from '~/components/note/note'; @@ -14,12 +16,14 @@ A stacked set of interactive headings which reveal or hide their associated cont Qwik UI's Accordion implementation follows the [WAI-Aria](https://www.w3.org/WAI/ARIA/apg/patterns/accordion/) design pattern, along with some additional API's that enhance the flexibility, types, and performance. -##### ✨ Features - -- Full keyboard navigation -- Single or Multi Accordion -- Controlled or uncontrolled -- Animatable, dynamic, and resumable +
[View Source Code ↗️](https://github.com/qwikifiers/qwik-ui/tree/main/packages/kit-headless/src/components/accordion) @@ -30,33 +34,16 @@ Qwik UI's Accordion implementation follows the [WAI-Aria](https://www.w3.org/WAI
-> Rather than using the `details` and `summary` tags as disclosure widgets, we use a custom implementation. While these widgets can be used without JavaScript, they come with their own accessibility drawbacks. + +**Why not just use the details & summary tags?** + +Rather than using the `details` and `summary` tags as disclosure widgets, we use a custom implementation. While these widgets can be used without JavaScript, they come with [their own accessibility drawbacks](https://www.scottohara.me/blog/2022/09/12/details-summary.html). + + ## Building blocks -```tsx -import { component$ } from '@builder.io/qwik'; -import { - AccordionRoot, - AccordionItem, - AccordionHeader, - AccordionTrigger, - AccordionContent, -} from '@qwik-ui/headless'; - -export default component$(() => { - return ( - - - - Title - - Content - - - ); -}); -``` + ### 🎨 Anatomy @@ -97,7 +84,11 @@ If you're curious about how the accordion is animated, you can use a built-in Qw The variable calculates the content height behind the scenes, so that you can use this variable in your keyframes. Out of the box, you can use the `accordion-open` and `accordion-close` keyframes in your project. These use an `animation` declaration on the height property. -> The animation above makes use of the overflow hidden declaration. You can also check out this awesome [Cubic Bezier Tool](https://cubic-bezier.com/) to visualize the animation curve. + + {' '} + The animation above makes use of the overflow hidden declaration. You can also check out + this awesome [Cubic Bezier Tool](https://cubic-bezier.com/) to visualize the animation curve. + ## Non-collapsible @@ -119,7 +110,12 @@ Any disabled elements will be skipped over when using tab or the `Up Arrow` and You can make the accordion items uncontrolled by adding the **defaultValue** prop on the items. This will open an accordion item without user interaction, and can be used on both type single and multi accordions. -> Keep in mind: if you're using `behavior="single"` with multiple defaultValue accordion items, the last item will be the one that opens. You may experience flickering behavior as well. + +**Don't try to open multiple items with single mode!** + +If you're using `behavior="single"` with multiple defaultValue accordion items, the last item will be the one that opens. You may experience flickering behavior as well. + + ## Custom Heading Label @@ -139,7 +135,11 @@ By default, when using the `AccordionHeader` component, it's rendered as an `h3` `onFocusIndexChange$` will keep track of the current focused index. It can be useful for when you want to programmatically change something based on what the user focuses. -> When a user clicks a trigger, they are also focusing it, which is worth keeping in mind. + + {' '} + When a user clicks a trigger, they are also focusing it, which is worth keeping in mind when + using this custom event. + ## Dynamic @@ -149,7 +149,10 @@ You can embrace reactivity, using signals, stores, and however else you'd like t When an Accordion Item is removed, a [Visible Task](https://qwik.builder.io/docs/components/tasks/#usevisibletask) runs that will clean up the DOM node in the browser, ensuring that you stay clear of race condition or memory leak issues. -> You can add or remove something at any index and the focus order will adhere to the DOM hierarchy! + + {' '} + You can add or remove something at any index and the focus order will adhere to the DOM hierarchy! +
If you'd prefer to add your own id to the Accordion Item with dynamic diff --git a/apps/website/src/routes/docs/headless/accordion/snippets/building-blocks.tsx b/apps/website/src/routes/docs/headless/accordion/snippets/building-blocks.tsx new file mode 100644 index 000000000..6ff4f72e7 --- /dev/null +++ b/apps/website/src/routes/docs/headless/accordion/snippets/building-blocks.tsx @@ -0,0 +1,21 @@ +import { component$ } from '@builder.io/qwik'; +import { + AccordionRoot, + AccordionItem, + AccordionHeader, + AccordionTrigger, + AccordionContent, +} from '@qwik-ui/headless'; + +export default component$(() => { + return ( + + + + Title + + Content + + + ); +}); diff --git a/apps/website/src/routes/docs/headless/install/confetti-button.tsx b/apps/website/src/routes/docs/headless/install/confetti-button.tsx new file mode 100644 index 000000000..fe13fabfd --- /dev/null +++ b/apps/website/src/routes/docs/headless/install/confetti-button.tsx @@ -0,0 +1,39 @@ +import { component$, useSignal } from '@builder.io/qwik'; +// @ts-ignore +import confetti from 'canvas-confetti'; + +export const ConfettiButton = component$(() => { + const buttonRef = useSignal(); + return ( +
+
+
+ +
+
+ ); +}); diff --git a/apps/website/src/routes/docs/headless/install/examples/accordion-qwik-city.tsx b/apps/website/src/routes/docs/headless/install/examples/accordion-qwik-city.tsx new file mode 100644 index 000000000..a87f02a3d --- /dev/null +++ b/apps/website/src/routes/docs/headless/install/examples/accordion-qwik-city.tsx @@ -0,0 +1,66 @@ +import { QwikIntrinsicElements, component$ } from '@builder.io/qwik'; +import { + AccordionRoot, + AccordionItem, + AccordionHeader, + AccordionTrigger, + AccordionContent, +} from '@qwik-ui/headless'; + +export default component$(() => { + const cats = [ + 'Admiral Turbo Meowington', + 'Edger Allen Paw', + 'Captain Sushi', + 'Fernsbane The Inquisitive', + ]; + + return ( + + {cats.map((item, index) => ( + + + + favorite cat {index + 1} + + + + + + +

{item}

+
+
+ ))} +
+ ); +}); + +export function SVG(props: QwikIntrinsicElements['svg']) { + return ( + + + + ); +} diff --git a/apps/website/src/routes/docs/headless/install/examples/accordion.tsx b/apps/website/src/routes/docs/headless/install/examples/accordion.tsx new file mode 100644 index 000000000..ae9c8abe1 --- /dev/null +++ b/apps/website/src/routes/docs/headless/install/examples/accordion.tsx @@ -0,0 +1,21 @@ +import { component$ } from '@builder.io/qwik'; +import { + AccordionRoot, + AccordionItem, + AccordionHeader, + AccordionTrigger, + AccordionContent, +} from '@qwik-ui/headless'; + +export default component$(() => { + return ( + + + + Click on me! + + Content + + + ); +}); diff --git a/apps/website/src/routes/docs/headless/install/examples/astro-accordion.tsx b/apps/website/src/routes/docs/headless/install/examples/astro-accordion.tsx new file mode 100644 index 000000000..774c84ded --- /dev/null +++ b/apps/website/src/routes/docs/headless/install/examples/astro-accordion.tsx @@ -0,0 +1,139 @@ +import { QwikIntrinsicElements, component$, useStyles$ } from '@builder.io/qwik'; +import { + AccordionRoot, + AccordionItem, + AccordionHeader, + AccordionTrigger, + AccordionContent, +} from '@qwik-ui/headless'; + +export default component$(() => { + const dogs = ['Othello', 'The Hobbit', 'Dune', 'The Giver']; + + useStyles$(` + .accordion-root { + box-sizing: border-box; + border-radius: 0.275rem; + color: #ffffff; + width: 250px; + max-width: 500px; + border: 1px solid #4B5563; + background-color: #4B5563; + } + + .accordion-trigger { + display: flex; + min-height: 44px; + width: 100%; + align-items: center; + justify-content: space-between; + padding: 0.5rem 1rem; + text-align: left; + border-bottom: 1px solid #374151; + background-color: #4B5563; + transition: background-color 200ms ease; + } + + .accordion-trigger:hover { + background-color: #374151; + } + + .accordion-trigger.rounded-t-sm { + border-top-left-radius: 0.125rem; + border-top-right-radius: 0.125rem; + } + + .accordion-trigger.rounded-b-sm { + border-bottom-left-radius: 0.125rem; + border-bottom-right-radius: 0.125rem; + } + + .accordion-trigger.border-b-0 { + border-bottom: 0; + } + + .accordion-trigger[aria-expanded="true"] { + border-radius: 0; + } + + .accordion-trigger svg { + transition: transform 500ms ease; + } + + .accordion-trigger[aria-expanded="true"] svg { + transform: rotateX(180deg); + } + + .accordion-content { + overflow: hidden; + background-color: #1F2937; + } + + .accordion-slide[data-state='open'] { + animation: 500ms cubic-bezier(0.87, 0, 0.13, 1) 0s 1 normal forwards accordion-open; + } + + .accordion-slide[data-state='closed'] { + animation: 500ms cubic-bezier(0.87, 0, 0.13, 1) 0s 1 normal forwards accordion-close; + } + + .accordion-content p { + background: #1F2937; + padding: 0.5rem 1rem; + } + + .accordion-item:last-of-type .accordion-content { + border-bottom-left-radius: 0.275rem; + border-bottom-right-radius: 0.275rem; + } + + .tom-headline { + margin-bottom: 16px; + font-weight: 600; + } + `); + + return ( + <> +

Tom's bookshelf

+ + {dogs.map((item, index) => ( + + + + favorite book {index + 1} + + + + + + +

{item}

+
+
+ ))} +
+ + ); +}); + +export function SVG(props: QwikIntrinsicElements['svg']) { + return ( + + + + ); +} diff --git a/apps/website/src/routes/docs/headless/install/index.mdx b/apps/website/src/routes/docs/headless/install/index.mdx new file mode 100644 index 000000000..e5de7e012 --- /dev/null +++ b/apps/website/src/routes/docs/headless/install/index.mdx @@ -0,0 +1,294 @@ +--- +title: 'Qwik UI - Installation' +--- + +import { Tab, TabList, TabPanel, Tabs } from '@qwik-ui/headless'; +import QwikLogo from '~/components/icons/QwikLogo.tsx'; +import AstroLogo from '~/components/icons/AstroLogo.tsx'; +import { Note } from '~/components/note/note.tsx'; +import qwikCityCLI from '/public/images/qwik-city-cli.webp'; +import astroCLI from '/public/images/astro-cli.webp'; +import qwikdevAstroCLI from '/public/images/qwikdev-astro-cli.webp'; +import { ConfettiButton } from './confetti-button'; +import { CodeCopy } from '~/components/code-copy/code-copy'; + +export const packages = { + npm: 'npm install @qwik-ui/headless', + yarn: 'yarn add @qwik-ui/headless', + pnpm: 'pnpm add @qwik-ui/headless', +}; + +export const qwikCityPackages = { + npm: 'npm create qwik@latest', + yarn: 'yarn create qwik', + pnpm: 'pnpm create qwik@latest', + bun: 'bun create qwik@latest', +}; + +export const astroPackages = { + npm: 'npm create astro@latest', + yarn: 'yarn create astro', + pnpm: 'pnpm create astro@latest', +}; + +export const qwikAstroCliPackages = { + npm: 'npx astro add @qwikdev/astro', + yarn: 'yarn astro add @qwikdev/astro', + pnpm: 'pnpm astro add @qwikdev/astro', +}; + +# Installation + +Install Qwik UI with your choice of package manager below: + + + + {Object.keys(packages).map((key, index) => ( + + {key} + + ))} + + {Object.entries(packages).map(([key, value], index) => ( + +
+ {value} + +
+
+ ))} +
+ + ## Meta-framework guides + + + + ## Building Blocks + + Each component includes a `building blocks` section, which provides a barebones example of the component. This can be used as a starting point for implementing the component from scratch. + + Below is an example of the `Accordion` component's building block: + + + + We will use this example as a Qwik UI component in each guide. + + ## Qwik City + + To create a Qwik city app, run the following command: + +{' '} + + + + {Object.keys(qwikCityPackages).map((key, index) => ( + + {key} + + ))} + + {Object.entries(qwikCityPackages).map(([key, value], index) => ( + +
+ {value} + +
+
+ ))} +
+ + For a more in-depth installation, or if you'd like to use a different package manager, follow the guide in the [Qwik docs](https://qwik.builder.io/docs/getting-started/#create-an-app-using-the-cli) + + Let's select the `empty app` option in the CLI to keep it simple. And remember, choosing the dad joke is not optional - it's mandatory! We have a highly sophisticated Dad Joke Detection System (DJDS) in place, so we'll know if you didn't! + +
+ +
+ + Below is the Qwik City project structure. Inside of the `src` directory, let's create a new folder called `accordion`. Then, a file named **`accordion.tsx`** inside of `src/components`. + +
+ Qwik City files + β”œβ”€ .eslintignore + β”œβ”€ .eslintrc.cjs + β”œβ”€ .gitignore + β”œβ”€ .prettierignore + β”œβ”€ README.md + β”œβ”€ package-lock.json + β”œβ”€ package.json + β”œβ”€ public + β”‚ β”œβ”€ favicon.svg + β”‚ β”œβ”€ manifest.json + β”‚ └─ robots.txt + β”œβ”€ src + β”‚ β”œβ”€ components + β”‚ β”‚ └─ accordion + β”‚ β”‚ └─ accordion.tsx + β”‚ β”‚ └─ router-head + β”‚ β”‚ └─ router-head.tsx + β”‚ β”œβ”€ entry.dev.tsx + β”‚ β”œβ”€ entry.preview.tsx + β”‚ β”œβ”€ entry.ssr.tsx + β”‚ β”œβ”€ global.css + β”‚ β”œβ”€ root.tsx + β”‚ └─ routes + β”‚ β”œβ”€ index.tsx + β”‚ β”œβ”€ layout.tsx + β”‚ └─ service-worker.ts + β”œβ”€ tsconfig.json + └─ vite.config.ts +
+ + Now let's copy our accordion code example from the building blocks section: + + + + + Hooray! We've now added our **first** Qwik UI component in Qwik City. It includes a starting point where the accordion functionality and aria behavior is added for us. + + + + Let's add a few styles to make the component stand out more, we'll use `Tailwind CSS` as a styling solution. + + + + + Here's a Qwik City [project example repository](https://github.com/thejackshelton/qwik-ui-scratch) with the content from above. Feel free to clone it and play with it. + + + ## Astro + + To set up an Astro application, add the following command in the terminal: + + + + {Object.keys(astroPackages).map((key, index) => ( + + {key} + + ))} + + {Object.entries(astroPackages).map(([key, value], index) => ( + +
+ {value} + +
+
+ ))} +
+ + Add a relative path for your project, and select the `empty` option in the CLI. + +
+ +
+ + Next, let's add the [@qwikdev/astro](https://www.npmjs.com/package/@qwikdev/astro) integration. This integration allows us to leverage resumability and Qwik components inside of Astro. + + Run the following command in the terminal: + + + + {Object.keys(qwikAstroCliPackages).map((key, index) => ( + + {key} + + ))} + + {Object.entries(qwikAstroCliPackages).map(([key, value], index) => ( + +
+ {value} + +
+
+ ))} +
+ +
+ +
+ + Then, let's make sure we use Qwik as our main **jsxImportSource** in `tsconfig.json`. Otherwise, it will not get the proper Qwik types. + + ```json + { + "extends": "astro/tsconfigs/strict", + "compilerOptions": { + "jsx": "react-jsx", + "jsxImportSource": "@builder.io/qwik" + } + } + ``` + + Under the `src` directory, let's create a folder called `components`. Similar to the Qwik City guide, we'll create a folder named `accordion`, and a file named **`accordion.tsx`**. + + Below is the project structure with this in place. + +
+ Astro files + β”œβ”€ .gitignore + β”œβ”€ README.md + β”œβ”€ astro.config.mjs + β”œβ”€ package-lock.json + β”œβ”€ package.json + β”œβ”€ public + β”‚ └─ favicon.svg + β”œβ”€ src + β”‚ β”œβ”€ env.d.ts + β”‚ └─ pages + β”‚ β”œβ”€ components + β”‚ β”‚ └─ accordion + β”‚ β”‚ └─ accordion.tsx + β”‚ └─ index.astro + └─ tsconfig.json +
+ + Once again, let's copy our `building-blocks` example from above. + + + {/* */} + + And we'll spice it up a bit using some vanilla CSS. + + + + + Here's an Astro [project example repository](https://github.com/thejackshelton/qwik-ui-astro-scratch) with the content from above. Feel free to clone it and play with it. + diff --git a/apps/website/src/routes/docs/headless/install/snippets/astro-tsconfig.json b/apps/website/src/routes/docs/headless/install/snippets/astro-tsconfig.json new file mode 100644 index 000000000..d633eeb9e --- /dev/null +++ b/apps/website/src/routes/docs/headless/install/snippets/astro-tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "astro/tsconfigs/strict", + "compilerOptions": { + "jsx": "react-jsx", + "jsxImportSource": "@builder.io/qwik" + } +} diff --git a/apps/website/src/routes/docs/headless/install/snippets/building-blocks.tsx b/apps/website/src/routes/docs/headless/install/snippets/building-blocks.tsx new file mode 100644 index 000000000..6ff4f72e7 --- /dev/null +++ b/apps/website/src/routes/docs/headless/install/snippets/building-blocks.tsx @@ -0,0 +1,21 @@ +import { component$ } from '@builder.io/qwik'; +import { + AccordionRoot, + AccordionItem, + AccordionHeader, + AccordionTrigger, + AccordionContent, +} from '@qwik-ui/headless'; + +export default component$(() => { + return ( + + + + Title + + Content + + + ); +}); diff --git a/apps/website/src/routes/docs/headless/introduction/index.mdx b/apps/website/src/routes/docs/headless/introduction/index.mdx new file mode 100644 index 000000000..7381e0216 --- /dev/null +++ b/apps/website/src/routes/docs/headless/introduction/index.mdx @@ -0,0 +1,183 @@ +--- +title: Qwik UI | Introduction +--- + +import HeadlessArt from '/public/images/qwik-ui-headless-hero.webp?jsx'; +import { Note } from '~/components/note/note'; +import { + AccordionRoot, + AccordionItem, + AccordionHeader, + AccordionTrigger, + AccordionContent, +} from '@qwik-ui/headless'; + +import { CollapsibleIcon } from '~/components/icons/CollapsibleIcon.tsx'; +import { AllContributors } from '~/components/all-contributors/all-contributors'; + +# Introduction + +
+ An open source component set optimized to work with Qwik +
+ +Qwik UI Headless Kit provides a complete set of totally customizable components with built-in structure, behavior, and state. This library serves as a foundation of your design system, providing the missing or non-existent functionality from native solutions. + +It gives you, the developer, more time to focus on what matters most, building your awesome app! Apply your favorite styling technology, CSS-in-JS, Tailwind CSS, or whatever floats your boat. Add just a few _ad hoc_ styles or implement a full-on design system, Qwik UI Headless makes it easy. + + +**Woah, why is there a 0 by the version?** + +Qwik UI is in its beta phase - it's like a roller coaster, thrilling and full of surprises! **Expect new features and some breaking changes** until we reach version 1.0. So, buckle up and enjoy the ride. 🏍️ + + + +## Vision + +In 2024, developers should not have to recreate the same [WAI-Aria Patterns](https://www.w3.org/WAI/ARIA/apg/patterns/) from scratch. Building custom components is challenging, and developers shouldn't need to reinvent common UI patterns. + +Our aim is to ensure Qwik UI is not just an effective, but also a simple, reliable, and flexible choice for developing applications. + +Qwik UI Headless is optimized to squeeze every possible ounce of performance out of Qwik _(Like lemonade from lemons that had a run-in with a steamroller.)_ πŸ₯€ + +## Why Qwik UI Headless? + +### The client and the server + +Like Qwik itself, Qwik UI is super performant because it renders everything it can on the server + +Unlike many other solutions that focus solely on client-side components, Qwik UI takes advantage of the server, the client, and the concept of resumability. + +This means that Qwik UI can operate with any meta-framework that supports Qwik, including the full framework benefits. At the time of writing, that includes [Qwik City](https://qwik.builder.io/docs/qwikcity/) and [Astro](https://astro.build/). + +### Embracing native first + +Qwik values HTML as the source of truth, and this principle extends to Qwik UI components. We appreciate and adopt the excellent work done by the [Open UI Group](https://open-ui.org/) when appropriate. + +
+ +
+ +
{' '} + +This approach also encompasses future native APIs. Users of Qwik UI might find themselves using components that can be gradually adopted into the native specification. This implies that, eventually, these custom patterns might not need any JavaScript. + + + For instance, [Qwik UI's popover + component](https://github.com/qwikifiers/qwik-ui/pull/445) uses the native Popover API + on supported browsers. The Anchor API is also incrementally adoptable. + + +## Features + +### Unstyled + +Qwik UI is a headless library, and comes with zero or very minimal styling. This means the design of your components are completely customizable. + + + +This is in contrast to styled libraries such as Bootstrap or Material UI, where [styles often need to be stripped](https://www.smashingmagazine.com/2022/05/you-dont-need-ui-framework/) in order to be custom. + + + +### Accessible at its core + +Everyone should have equal access to information and functionality on the web. Every Qwik UI component is designed to follow the [WCAG Guidelines](https://www.w3.org/WAI/standards-guidelines/wcag/). + +However, it's a common misconception that meeting WCAG success criteria guarantees full accessibility of your components. Unfortunately, this is not the case. + +The ultimate measure of your components' accessibility is user testing. This aspect, often overlooked in other projects, is a high priority for us. + +### Developer Experience that matches UX + +Many libraries tout their excellent Developer Experience (DX), but this doesn't necessarily translate into a superior User Experience (UX). + +Conversely, some packages offer great UX, but fall short when it comes to DX. + +One of the benefits of Qwik is its ability to create performant applications without compromising on DX. Our goal is to extend this same balance of performance and ease-of-use to those utilizing Qwik UI components. + +Some examples being: + +- TypeScript support +- Custom Signal Binds +- Automatic entry and exit animations +- SSR & SSG, SPA, and hybrid support +- Fine-grained lazy loading + +## Community Driven + +Qwik UI is for the community, by the community. An open source project that would not be where it is without the awesome work of its contributors. + + + +## FAQ + + + + + + **What kind of support or resources are available if I encounter issues with Qwik UI?** + + + + +
+
+ If you stumble into any problems, [create an issue](https://github.com/qwikifiers/qwik-ui/issues) on the Qwik UI repository. +
+ + We also have a [discord community](https://discord.gg/PVWUUejrez) with a Qwik UI channel where you can raise any concerns, propose ideas, or chat all things Qwik UI 😊 +
+
+
+ + + + **How can I contribute to the project?** + + + + +
+ We provide a [contributing](/docs/headless/contributing) guide to help get familiar with the repository. + +
+ Additionally, we offer a quick start [setup guide](https://github.com/qwikifiers/qwik-ui/blob/main/CONTRIBUTING.md) and a section dedicated to advanced resources below the Components navigation. +
+
+
+
+ + + + **How can I migrate my existing application to use Qwik UI?** + + + + +
+ If you're using `Qwik-React`, `Qwik-Angular`, `@qwikdev/astro`, we suggest incrementally adding Qwik UI components to your application. + +
+ Qwik, built as a microfrontend, allows you to incrementally integrate Qwik UI components into your existing application. This approach reduces migration risk and complexity, letting you leverage Qwik UI's benefits at your own pace. +
+
+
+
+ +
+ +## Credits + +We strongly believe in having a [learner's mindset](https://www.jakeyou.com/blog/learners-mindset-how-to-be-a-learner), and as such, we've drawn inspiration from a multitude of projects, learning from their successes and challenges. + +Qwik UI's development has been shaped by the following remarkable projects: + +- [Radix UI](https://www.radix-ui.com/) +- [Kobalte](https://kobalte.dev/docs/core/overview/introduction) +- [Melt UI](https://www.melt-ui.com/docs/introduction) +- [React Aria](https://react-spectrum.adobe.com/react-aria/) +- [Reach UI](https://reach.tech/) diff --git a/apps/website/src/routes/docs/headless/introduction/snippets/headless-css.css b/apps/website/src/routes/docs/headless/introduction/snippets/headless-css.css new file mode 100644 index 000000000..4a5db953f --- /dev/null +++ b/apps/website/src/routes/docs/headless/introduction/snippets/headless-css.css @@ -0,0 +1,19 @@ +.modal { + min-width: 50rem; + min-height: 50rem; + border-radius: 5px; + box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); + padding: 1rem; +} + +.modal-header { + margin-bottom: 1rem; +} + +.modal-body { + margin-bottom: 1rem; +} + +.modal-footer { + text-align: right; +} diff --git a/apps/website/src/routes/docs/headless/introduction/snippets/headless-jsx.tsx b/apps/website/src/routes/docs/headless/introduction/snippets/headless-jsx.tsx new file mode 100644 index 000000000..45632c468 --- /dev/null +++ b/apps/website/src/routes/docs/headless/introduction/snippets/headless-jsx.tsx @@ -0,0 +1,16 @@ +import { component$, useSignal, useStyles$ } from '@builder.io/qwik'; +import { Modal, ModalContent, ModalFooter, ModalHeader } from '@qwik-ui/headless'; +import styles from './headless-css.css?inline'; + +export default component$(() => { + const showSig = useSignal(false); + useStyles$(styles); + + return ( + + + + + + ); +}); diff --git a/apps/website/src/routes/docs/headless/select/examples/fruits.tsx b/apps/website/src/routes/docs/headless/select/examples/fruits.tsx index eed196e11..f9aa92c4b 100644 --- a/apps/website/src/routes/docs/headless/select/examples/fruits.tsx +++ b/apps/website/src/routes/docs/headless/select/examples/fruits.tsx @@ -13,61 +13,61 @@ export default component$(() => { <>
- - - - - - - - - - - Apples - - - Apricot - - - Avocado - - - Grapes - - - Guava - - - Oranges - - - + + + + + + + + + + + Apples + + + Apricot + + + Avocado + + + Grapes + + + Guava + + + Oranges + + +
); diff --git a/apps/website/tsconfig.app.json b/apps/website/tsconfig.app.json index 9af9e4400..a8c885e29 100644 --- a/apps/website/tsconfig.app.json +++ b/apps/website/tsconfig.app.json @@ -6,5 +6,11 @@ }, "files": [], "exclude": [], - "include": ["**/*.js", "**/*.jsx", "**/*.ts", "**/*.tsx"] + "include": [ + "**/*.js", + "**/*.jsx", + "**/*.ts", + "**/*.tsx", + "src/routes/docs/headless/introduction/index.mdx" + ] } diff --git a/package.json b/package.json index 8e4151408..db8e84bad 100644 --- a/package.json +++ b/package.json @@ -129,10 +129,6 @@ "vitest": "^0.34.3", "wrangler": "^3.11.0" }, - "dependencies": { - "@fontsource-variable/inter": "5.0.8", - "tslib": "^2.6.2" - }, "config": { "commitizen": { "path": "./node_modules/cz-conventional-changelog" @@ -143,6 +139,12 @@ "qwik ui components", "components library" ], + "dependencies": { + "@fontsource-variable/inter": "5.0.8", + "canvas-confetti": "1.9.2", + "shiki": "0.14.5", + "tslib": "^2.6.2" + }, "nx": { "includedScripts": [] } diff --git a/packages/kit-headless/CHANGELOG.md b/packages/kit-headless/CHANGELOG.md index 7ee360f2a..483ed1f0e 100644 --- a/packages/kit-headless/CHANGELOG.md +++ b/packages/kit-headless/CHANGELOG.md @@ -4,126 +4,105 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/s ## [0.1.22](https://github.com/qwikifiers/qwik-ui/compare/headless-0.1.21...headless-0.1.22) (2023-12-01) - - ## [0.1.21](https://github.com/qwikifiers/qwik-ui/compare/headless-0.1.20...headless-0.1.21) (2023-12-01) - - ## [0.1.20](https://github.com/qwikifiers/qwik-ui/compare/headless-0.1.19...headless-0.1.20) (2023-11-30) - - ## [0.1.19](https://github.com/qwikifiers/qwik-ui/compare/headless-0.1.18...headless-0.1.19) (2023-11-30) - - ## [0.1.18](https://github.com/qwikifiers/qwik-ui/compare/headless-0.1.17...headless-0.1.18) (2023-11-30) - ### Bug Fixes -* **accordion:** disabled in safari ([cfe5083](https://github.com/qwikifiers/qwik-ui/commit/cfe5083c8d3ddc23338a1527f946f54eae0c2231)) -* combobox test ([#480](https://github.com/qwikifiers/qwik-ui/issues/480)) ([166093c](https://github.com/qwikifiers/qwik-ui/commit/166093c39d9f6d076094b986fc2a1a1f7feba7c1)) -* **dialog:a11y:** replce role=button with section element ([74a9b55](https://github.com/qwikifiers/qwik-ui/commit/74a9b556c7ba6e1f0a530304364bba969a63d6c9)) -* **dialog:** close dialog on backdrop click ([ea5ba0e](https://github.com/qwikifiers/qwik-ui/commit/ea5ba0e5cc356ddb0800987e421a713261f42894)) -* **dialog:** export dialog from headless library ([8e85362](https://github.com/qwikifiers/qwik-ui/commit/8e8536232e3657c87599e7c1beac882320b7aa8c)) -* **dialog:** lock scrolling when dialog is opened ([cf6783e](https://github.com/qwikifiers/qwik-ui/commit/cf6783e138d6282be5f67b1937f4409ac3ad67bd)) -* **dialog:** resolve lint-error concerning scope ([7713ed1](https://github.com/qwikifiers/qwik-ui/commit/7713ed18a5ec83aaecbfeae12db6807b7c0447cb)) -* **docs:** animation support, fixed scrollbar flickering across the board ([3ab1824](https://github.com/qwikifiers/qwik-ui/commit/3ab1824813135e2a88c6c4c1978638d8056acb9f)) -* **modal:** animations events are now properly cleaned up ([40cd056](https://github.com/qwikifiers/qwik-ui/commit/40cd056e9add2e08f4fe633bf14ced2dbc7b5d0a)) -* **modal:** avoid accidantal close clicking the edges of the modal ([bb4b582](https://github.com/qwikifiers/qwik-ui/commit/bb4b5821947c29597ae6046a4457787eba4a38c3)) -* **modal:** avoid closing when label is clicked ([87fce3e](https://github.com/qwikifiers/qwik-ui/commit/87fce3edf47f3cf78344e9786307169c700d73e0)) -* **modal:** correct calculation of boundingClientRect ([95f9676](https://github.com/qwikifiers/qwik-ui/commit/95f9676c09ad1e7be0f608acffccc04052c5de57)) -* **modal:** deactivate focus-trap before close ([a802ef2](https://github.com/qwikifiers/qwik-ui/commit/a802ef2f87cd51b82dfb0d997b49871dc6146d90)) -* **modal:** deactivate FocusTrap once ([38e8b03](https://github.com/qwikifiers/qwik-ui/commit/38e8b0355303993e6a86e5064d89aa3b21f1eff1)) -* **modal:** fixing scrollbar flickers ([426bf48](https://github.com/qwikifiers/qwik-ui/commit/426bf48f356597f9eda60c48f80c5caa94de9807)) -* **modal:** get modal to work again ([d3219bd](https://github.com/qwikifiers/qwik-ui/commit/d3219bdf88e0df4051c4864ba984908bb94d5c24)) -* **modal:** prevent closing from being executed twice ([5ebf5d9](https://github.com/qwikifiers/qwik-ui/commit/5ebf5d9555426e8c0a04a5a2dd53b505347222f9)) -* **modal:** remove focus logic since it works out-of-the-box ([cb81d11](https://github.com/qwikifiers/qwik-ui/commit/cb81d1125e921b59bc314df5318f3565c4af17cb)) -* **modal:** remove modal-closing when no animation is applied ([d18ca00](https://github.com/qwikifiers/qwik-ui/commit/d18ca0042f06eb4bdff1cd50db2a1f266bf61b69)) -* **modal:** remove modal-opening after animation is finished ([884a0df](https://github.com/qwikifiers/qwik-ui/commit/884a0df1febec21df108fbc0a51067fdca15f390)) -* **modal:** scroll flicker ([20946a9](https://github.com/qwikifiers/qwik-ui/commit/20946a939a1a7e8f64ffc96389bce0f77c12b878)) -* **modal:** scrollbar flicker, copy button goes back to normal state ([fc3f0cf](https://github.com/qwikifiers/qwik-ui/commit/fc3f0cf87f4d9b62a57979080eee357edf743a19)) -* **modal:** stop calling closing in task-clean-up ([faddf1a](https://github.com/qwikifiers/qwik-ui/commit/faddf1a138996d5d93c07a41b894e4531a59f061)) -* **modal:** tolerate if no tabbable elements are inside the modal ([81ee5d2](https://github.com/qwikifiers/qwik-ui/commit/81ee5d2148a96bf9873dd1454031ba77b5c38c14)) -* **modal:** transition was using the wrong event, fixed ([10360be](https://github.com/qwikifiers/qwik-ui/commit/10360be87794568b66a3474f586c3f92a2c2ee15)) -* **modal:** type errors preventing preview build ([34f86bb](https://github.com/qwikifiers/qwik-ui/commit/34f86bb88183d5a7c231c145cedf3f3d1d2dddd0)) -* pagination ([#499](https://github.com/qwikifiers/qwik-ui/issues/499)) ([1b040d9](https://github.com/qwikifiers/qwik-ui/commit/1b040d903edb564cf955bb2f1a9587b50567ce81)) -* **pagination:** add disable attribute and remove pointer event none ([c6b3cde](https://github.com/qwikifiers/qwik-ui/commit/c6b3cde205102f601db6a596c6e2de3800b01754)) -* **pagination:** moved signal update inside useTask ([fd0965e](https://github.com/qwikifiers/qwik-ui/commit/fd0965e11ca21ed34729bd12fbeba8f13c6d9e8e)) -* **pagination:** remove implicit role button ([2476236](https://github.com/qwikifiers/qwik-ui/commit/24762369b47bfad46ddc04b95c64cf9cce609203)) -* **pagination:** remove implicit role=navigation ([8294b37](https://github.com/qwikifiers/qwik-ui/commit/8294b37e6c19c09584b1654dd117f0bc5a74997f)) -* **pagination:** remove useTask ([c083445](https://github.com/qwikifiers/qwik-ui/commit/c08344575be7eac1c9ae722e67d9cd551f55ea7f)) -* **pagination:** use relative path in import ([9b2d1da](https://github.com/qwikifiers/qwik-ui/commit/9b2d1da861f00f6649765e0106115db8d850a824)) -* **repo:** various target and dependency updates ([03851a9](https://github.com/qwikifiers/qwik-ui/commit/03851a9ff8320dcecc26b11ba21893d2181c20ca)) -* **typos:** minor typo correction in comments ([2f6646a](https://github.com/qwikifiers/qwik-ui/commit/2f6646a941b883521445285644137fd808fc196c)) -* **vite.config.ts:** remove external rollupOptions ([50c5abb](https://github.com/qwikifiers/qwik-ui/commit/50c5abb651fce8412014f9c025a5f6000488076e)), closes [#473](https://github.com/qwikifiers/qwik-ui/issues/473) - +- **accordion:** disabled in safari ([cfe5083](https://github.com/qwikifiers/qwik-ui/commit/cfe5083c8d3ddc23338a1527f946f54eae0c2231)) +- combobox test ([#480](https://github.com/qwikifiers/qwik-ui/issues/480)) ([166093c](https://github.com/qwikifiers/qwik-ui/commit/166093c39d9f6d076094b986fc2a1a1f7feba7c1)) +- **dialog:a11y:** replce role=button with section element ([74a9b55](https://github.com/qwikifiers/qwik-ui/commit/74a9b556c7ba6e1f0a530304364bba969a63d6c9)) +- **dialog:** close dialog on backdrop click ([ea5ba0e](https://github.com/qwikifiers/qwik-ui/commit/ea5ba0e5cc356ddb0800987e421a713261f42894)) +- **dialog:** export dialog from headless library ([8e85362](https://github.com/qwikifiers/qwik-ui/commit/8e8536232e3657c87599e7c1beac882320b7aa8c)) +- **dialog:** lock scrolling when dialog is opened ([cf6783e](https://github.com/qwikifiers/qwik-ui/commit/cf6783e138d6282be5f67b1937f4409ac3ad67bd)) +- **dialog:** resolve lint-error concerning scope ([7713ed1](https://github.com/qwikifiers/qwik-ui/commit/7713ed18a5ec83aaecbfeae12db6807b7c0447cb)) +- **docs:** animation support, fixed scrollbar flickering across the board ([3ab1824](https://github.com/qwikifiers/qwik-ui/commit/3ab1824813135e2a88c6c4c1978638d8056acb9f)) +- **modal:** animations events are now properly cleaned up ([40cd056](https://github.com/qwikifiers/qwik-ui/commit/40cd056e9add2e08f4fe633bf14ced2dbc7b5d0a)) +- **modal:** avoid accidantal close clicking the edges of the modal ([bb4b582](https://github.com/qwikifiers/qwik-ui/commit/bb4b5821947c29597ae6046a4457787eba4a38c3)) +- **modal:** avoid closing when label is clicked ([87fce3e](https://github.com/qwikifiers/qwik-ui/commit/87fce3edf47f3cf78344e9786307169c700d73e0)) +- **modal:** correct calculation of boundingClientRect ([95f9676](https://github.com/qwikifiers/qwik-ui/commit/95f9676c09ad1e7be0f608acffccc04052c5de57)) +- **modal:** deactivate focus-trap before close ([a802ef2](https://github.com/qwikifiers/qwik-ui/commit/a802ef2f87cd51b82dfb0d997b49871dc6146d90)) +- **modal:** deactivate FocusTrap once ([38e8b03](https://github.com/qwikifiers/qwik-ui/commit/38e8b0355303993e6a86e5064d89aa3b21f1eff1)) +- **modal:** fixing scrollbar flickers ([426bf48](https://github.com/qwikifiers/qwik-ui/commit/426bf48f356597f9eda60c48f80c5caa94de9807)) +- **modal:** get modal to work again ([d3219bd](https://github.com/qwikifiers/qwik-ui/commit/d3219bdf88e0df4051c4864ba984908bb94d5c24)) +- **modal:** prevent closing from being executed twice ([5ebf5d9](https://github.com/qwikifiers/qwik-ui/commit/5ebf5d9555426e8c0a04a5a2dd53b505347222f9)) +- **modal:** remove focus logic since it works out-of-the-box ([cb81d11](https://github.com/qwikifiers/qwik-ui/commit/cb81d1125e921b59bc314df5318f3565c4af17cb)) +- **modal:** remove modal-closing when no animation is applied ([d18ca00](https://github.com/qwikifiers/qwik-ui/commit/d18ca0042f06eb4bdff1cd50db2a1f266bf61b69)) +- **modal:** remove modal-opening after animation is finished ([884a0df](https://github.com/qwikifiers/qwik-ui/commit/884a0df1febec21df108fbc0a51067fdca15f390)) +- **modal:** scroll flicker ([20946a9](https://github.com/qwikifiers/qwik-ui/commit/20946a939a1a7e8f64ffc96389bce0f77c12b878)) +- **modal:** scrollbar flicker, copy button goes back to normal state ([fc3f0cf](https://github.com/qwikifiers/qwik-ui/commit/fc3f0cf87f4d9b62a57979080eee357edf743a19)) +- **modal:** stop calling closing in task-clean-up ([faddf1a](https://github.com/qwikifiers/qwik-ui/commit/faddf1a138996d5d93c07a41b894e4531a59f061)) +- **modal:** tolerate if no tabbable elements are inside the modal ([81ee5d2](https://github.com/qwikifiers/qwik-ui/commit/81ee5d2148a96bf9873dd1454031ba77b5c38c14)) +- **modal:** transition was using the wrong event, fixed ([10360be](https://github.com/qwikifiers/qwik-ui/commit/10360be87794568b66a3474f586c3f92a2c2ee15)) +- **modal:** type errors preventing preview build ([34f86bb](https://github.com/qwikifiers/qwik-ui/commit/34f86bb88183d5a7c231c145cedf3f3d1d2dddd0)) +- pagination ([#499](https://github.com/qwikifiers/qwik-ui/issues/499)) ([1b040d9](https://github.com/qwikifiers/qwik-ui/commit/1b040d903edb564cf955bb2f1a9587b50567ce81)) +- **pagination:** add disable attribute and remove pointer event none ([c6b3cde](https://github.com/qwikifiers/qwik-ui/commit/c6b3cde205102f601db6a596c6e2de3800b01754)) +- **pagination:** moved signal update inside useTask ([fd0965e](https://github.com/qwikifiers/qwik-ui/commit/fd0965e11ca21ed34729bd12fbeba8f13c6d9e8e)) +- **pagination:** remove implicit role button ([2476236](https://github.com/qwikifiers/qwik-ui/commit/24762369b47bfad46ddc04b95c64cf9cce609203)) +- **pagination:** remove implicit role=navigation ([8294b37](https://github.com/qwikifiers/qwik-ui/commit/8294b37e6c19c09584b1654dd117f0bc5a74997f)) +- **pagination:** remove useTask ([c083445](https://github.com/qwikifiers/qwik-ui/commit/c08344575be7eac1c9ae722e67d9cd551f55ea7f)) +- **pagination:** use relative path in import ([9b2d1da](https://github.com/qwikifiers/qwik-ui/commit/9b2d1da861f00f6649765e0106115db8d850a824)) +- **repo:** various target and dependency updates ([03851a9](https://github.com/qwikifiers/qwik-ui/commit/03851a9ff8320dcecc26b11ba21893d2181c20ca)) +- **typos:** minor typo correction in comments ([2f6646a](https://github.com/qwikifiers/qwik-ui/commit/2f6646a941b883521445285644137fd808fc196c)) +- **vite.config.ts:** remove external rollupOptions ([50c5abb](https://github.com/qwikifiers/qwik-ui/commit/50c5abb651fce8412014f9c025a5f6000488076e)), closes [#473](https://github.com/qwikifiers/qwik-ui/issues/473) ### Features -* **dialog:** add ContentText ([017164a](https://github.com/qwikifiers/qwik-ui/commit/017164a5b0eca3c427120eb39e65cee158c5014f)) -* **dialog:** add dialog ([36fdfec](https://github.com/qwikifiers/qwik-ui/commit/36fdfec88c39ddef2253af961363ed408ecf9d4c)) -* **dialog:** add Dialog.Actions ([253fd58](https://github.com/qwikifiers/qwik-ui/commit/253fd5848b9ecd19595e5591e1499bc7307c97b5)) -* **dialog:** add Dialog.Title ([61ace39](https://github.com/qwikifiers/qwik-ui/commit/61ace39bd7ffa6597364f80d50a8f9620959f949)) -* **dialog:** add Example for tailwind dialog ([584fc0e](https://github.com/qwikifiers/qwik-ui/commit/584fc0e9075add00e8be78b23e0d5edea2443bf1)) -* **dialog:** all dialog overrides are passed via Dialog.Root ([64997dc](https://github.com/qwikifiers/qwik-ui/commit/64997dcf1093685f4b0323bee8f0116def335222)) -* **dialog:** expose props of Dialog.Root ([cb578e4](https://github.com/qwikifiers/qwik-ui/commit/cb578e43aa7d28381c0ad2a145a9374ec285e208)) -* **dialog:** expose public API via ref ([9aba660](https://github.com/qwikifiers/qwik-ui/commit/9aba660131e9e8ff2698c7a570c6dde968d3b346)) -* **dialog:** introduce Dialog.Trigger & Dialog.Portal ([bfc48a7](https://github.com/qwikifiers/qwik-ui/commit/bfc48a7f376fbba25b5849c0ae4bd0bf920284fc)) -* **dialog:** make tailwind example work ([2c93081](https://github.com/qwikifiers/qwik-ui/commit/2c930811ab5630019191decd79eb2a79df8a36bd)) -* **dialog:** position Dialog.ContentTitle sticky ([6d4ffc2](https://github.com/qwikifiers/qwik-ui/commit/6d4ffc21c34dc6b63b43436e587960048ca4428e)) -* **dialog:** stop passing through every dialog-property ([0591394](https://github.com/qwikifiers/qwik-ui/commit/05913942e1582951116f26bba220ce5f9c67cd42)) -* **dialog:** support full-screen mode ([a8470ed](https://github.com/qwikifiers/qwik-ui/commit/a8470ed2fb582895504a5ef8afd2d6f1d7d6fb7c)) -* **focus trapping:** adding focus trapping to the modal, executes when open, cleans up when closes ([456240c](https://github.com/qwikifiers/qwik-ui/commit/456240ce1d89032063e6d4fce6a2e46f0b50bf6a)) -* **focus-trap:** setup skeleton ([4d4f4b5](https://github.com/qwikifiers/qwik-ui/commit/4d4f4b5eba7f4bbfa3e99cea7f2abd264149b1fe)) -* **modal:** allow disabling close on backdrop-click ([70c88cc](https://github.com/qwikifiers/qwik-ui/commit/70c88cceae4162965318ea53170e0f5af18c1007)) -* **modal:** allow styling ModalContent ([a849cd8](https://github.com/qwikifiers/qwik-ui/commit/a849cd84706c088e05cf04f5d818b25d4a4cf556)) -* **modal:** clean up focus-trap ([98a3f4d](https://github.com/qwikifiers/qwik-ui/commit/98a3f4d792f27982a015c7e16b3c8255ed59e831)) -* **modal:** export public API ([c737fce](https://github.com/qwikifiers/qwik-ui/commit/c737fce43d8876e3ee6db7b2d76a8322a0727549)) -* **modal:** hero example changed, fixed copy button and border radius issue, semantic markup ([831dd89](https://github.com/qwikifiers/qwik-ui/commit/831dd89ec3538642fef75412a659c002da91897f)) -* **modal:** introduce trigger, close and portal ([0270e0f](https://github.com/qwikifiers/qwik-ui/commit/0270e0f0a6a8170c84a4bd2874e8e54d3c8f0a42)) -* **modal:** remove "show" & "bind:closeOnBackdropClick" ([d0dc878](https://github.com/qwikifiers/qwik-ui/commit/d0dc8782344284b73dc62cc98df831de4cfa5f41)) -* **modal:** remove fullScreen property ([be52fc2](https://github.com/qwikifiers/qwik-ui/commit/be52fc26228f2d7f08893b6e4bb9be8e5edc232f)) -* **modal:** require bind:show ([99ae628](https://github.com/qwikifiers/qwik-ui/commit/99ae6284ce69c0687a6321817e121cd5cab3395f)) -* **modal:** transition support, fixed type errors in spec ([0da3e6b](https://github.com/qwikifiers/qwik-ui/commit/0da3e6b84f1738cb6e1804df8f2205c041ab4995)) -* **modal:** use signals instead of exposing functions ([6ffa690](https://github.com/qwikifiers/qwik-ui/commit/6ffa6904951683f8282e92f6332a6b34f03ebeef)) -* **pagination:** add algorithm for dynamic button generation ([79a0683](https://github.com/qwikifiers/qwik-ui/commit/79a0683f07b9cd8f6e977429b319020fd5fc5a31)) -* **pagination:** add disable feature and improve doc ([e05014a](https://github.com/qwikifiers/qwik-ui/commit/e05014adf0de341a9bb8a0afbb0da7e30d3eeeef)) -* **pagination:** allow to hide next and previous buttons ([ee8b639](https://github.com/qwikifiers/qwik-ui/commit/ee8b63966d0b741c78c753b2aeead9a55ab4de3c)) -* **pagination:** support custom labels ([cf9e79e](https://github.com/qwikifiers/qwik-ui/commit/cf9e79ea0a27ad517ef6afb6ef78b3fa3bafa9c6)) -* **tailwind:dialog:** add full-screen example ([03a6d1f](https://github.com/qwikifiers/qwik-ui/commit/03a6d1f87adb431ece1202c0528a99a7b6b7a84b)) -* **tailwind:dialog:** add scrolling content example ([03f3120](https://github.com/qwikifiers/qwik-ui/commit/03f3120b76fe1afbd4a899ef38a5f92070a5036e)) - +- **dialog:** add ContentText ([017164a](https://github.com/qwikifiers/qwik-ui/commit/017164a5b0eca3c427120eb39e65cee158c5014f)) +- **dialog:** add dialog ([36fdfec](https://github.com/qwikifiers/qwik-ui/commit/36fdfec88c39ddef2253af961363ed408ecf9d4c)) +- **dialog:** add Dialog.Actions ([253fd58](https://github.com/qwikifiers/qwik-ui/commit/253fd5848b9ecd19595e5591e1499bc7307c97b5)) +- **dialog:** add Dialog.Title ([61ace39](https://github.com/qwikifiers/qwik-ui/commit/61ace39bd7ffa6597364f80d50a8f9620959f949)) +- **dialog:** add Example for tailwind dialog ([584fc0e](https://github.com/qwikifiers/qwik-ui/commit/584fc0e9075add00e8be78b23e0d5edea2443bf1)) +- **dialog:** all dialog overrides are passed via Dialog.Root ([64997dc](https://github.com/qwikifiers/qwik-ui/commit/64997dcf1093685f4b0323bee8f0116def335222)) +- **dialog:** expose props of Dialog.Root ([cb578e4](https://github.com/qwikifiers/qwik-ui/commit/cb578e43aa7d28381c0ad2a145a9374ec285e208)) +- **dialog:** expose public API via ref ([9aba660](https://github.com/qwikifiers/qwik-ui/commit/9aba660131e9e8ff2698c7a570c6dde968d3b346)) +- **dialog:** introduce Dialog.Trigger & Dialog.Portal ([bfc48a7](https://github.com/qwikifiers/qwik-ui/commit/bfc48a7f376fbba25b5849c0ae4bd0bf920284fc)) +- **dialog:** make tailwind example work ([2c93081](https://github.com/qwikifiers/qwik-ui/commit/2c930811ab5630019191decd79eb2a79df8a36bd)) +- **dialog:** position Dialog.ContentTitle sticky ([6d4ffc2](https://github.com/qwikifiers/qwik-ui/commit/6d4ffc21c34dc6b63b43436e587960048ca4428e)) +- **dialog:** stop passing through every dialog-property ([0591394](https://github.com/qwikifiers/qwik-ui/commit/05913942e1582951116f26bba220ce5f9c67cd42)) +- **dialog:** support full-screen mode ([a8470ed](https://github.com/qwikifiers/qwik-ui/commit/a8470ed2fb582895504a5ef8afd2d6f1d7d6fb7c)) +- **focus trapping:** adding focus trapping to the modal, executes when open, cleans up when closes ([456240c](https://github.com/qwikifiers/qwik-ui/commit/456240ce1d89032063e6d4fce6a2e46f0b50bf6a)) +- **focus-trap:** setup skeleton ([4d4f4b5](https://github.com/qwikifiers/qwik-ui/commit/4d4f4b5eba7f4bbfa3e99cea7f2abd264149b1fe)) +- **modal:** allow disabling close on backdrop-click ([70c88cc](https://github.com/qwikifiers/qwik-ui/commit/70c88cceae4162965318ea53170e0f5af18c1007)) +- **modal:** allow styling ModalContent ([a849cd8](https://github.com/qwikifiers/qwik-ui/commit/a849cd84706c088e05cf04f5d818b25d4a4cf556)) +- **modal:** clean up focus-trap ([98a3f4d](https://github.com/qwikifiers/qwik-ui/commit/98a3f4d792f27982a015c7e16b3c8255ed59e831)) +- **modal:** export public API ([c737fce](https://github.com/qwikifiers/qwik-ui/commit/c737fce43d8876e3ee6db7b2d76a8322a0727549)) +- **modal:** hero example changed, fixed copy button and border radius issue, semantic markup ([831dd89](https://github.com/qwikifiers/qwik-ui/commit/831dd89ec3538642fef75412a659c002da91897f)) +- **modal:** introduce trigger, close and portal ([0270e0f](https://github.com/qwikifiers/qwik-ui/commit/0270e0f0a6a8170c84a4bd2874e8e54d3c8f0a42)) +- **modal:** remove "show" & "bind:closeOnBackdropClick" ([d0dc878](https://github.com/qwikifiers/qwik-ui/commit/d0dc8782344284b73dc62cc98df831de4cfa5f41)) +- **modal:** remove fullScreen property ([be52fc2](https://github.com/qwikifiers/qwik-ui/commit/be52fc26228f2d7f08893b6e4bb9be8e5edc232f)) +- **modal:** require bind:show ([99ae628](https://github.com/qwikifiers/qwik-ui/commit/99ae6284ce69c0687a6321817e121cd5cab3395f)) +- **modal:** transition support, fixed type errors in spec ([0da3e6b](https://github.com/qwikifiers/qwik-ui/commit/0da3e6b84f1738cb6e1804df8f2205c041ab4995)) +- **modal:** use signals instead of exposing functions ([6ffa690](https://github.com/qwikifiers/qwik-ui/commit/6ffa6904951683f8282e92f6332a6b34f03ebeef)) +- **pagination:** add algorithm for dynamic button generation ([79a0683](https://github.com/qwikifiers/qwik-ui/commit/79a0683f07b9cd8f6e977429b319020fd5fc5a31)) +- **pagination:** add disable feature and improve doc ([e05014a](https://github.com/qwikifiers/qwik-ui/commit/e05014adf0de341a9bb8a0afbb0da7e30d3eeeef)) +- **pagination:** allow to hide next and previous buttons ([ee8b639](https://github.com/qwikifiers/qwik-ui/commit/ee8b63966d0b741c78c753b2aeead9a55ab4de3c)) +- **pagination:** support custom labels ([cf9e79e](https://github.com/qwikifiers/qwik-ui/commit/cf9e79ea0a27ad517ef6afb6ef78b3fa3bafa9c6)) +- **tailwind:dialog:** add full-screen example ([03a6d1f](https://github.com/qwikifiers/qwik-ui/commit/03a6d1f87adb431ece1202c0528a99a7b6b7a84b)) +- **tailwind:dialog:** add scrolling content example ([03f3120](https://github.com/qwikifiers/qwik-ui/commit/03f3120b76fe1afbd4a899ef38a5f92070a5036e)) ### Reverts -* Revert "refactor(modal): remove ESC-handler" ([4a453a8](https://github.com/qwikifiers/qwik-ui/commit/4a453a87ccb37743d05978ea0c0b55da31f9d643)) - - +- Revert "refactor(modal): remove ESC-handler" ([4a453a8](https://github.com/qwikifiers/qwik-ui/commit/4a453a87ccb37743d05978ea0c0b55da31f9d643)) ## [0.1.17](https://github.com/qwikifiers/qwik-ui/compare/headless-0.1.16...headless-0.1.17) (2023-10-03) - - ## [0.1.16](https://github.com/qwikifiers/qwik-ui/compare/headless-0.1.15...headless-0.1.16) (2023-09-26) - ### Bug Fixes -* **types:** types no longer under qwik-ui/ ([5afc917](https://github.com/qwikifiers/qwik-ui/commit/5afc9174b015c576b05caa72266e0ff38ab73031)), closes [#396](https://github.com/qwikifiers/qwik-ui/issues/396) - - +- **types:** types no longer under qwik-ui/ ([5afc917](https://github.com/qwikifiers/qwik-ui/commit/5afc9174b015c576b05caa72266e0ff38ab73031)), closes [#396](https://github.com/qwikifiers/qwik-ui/issues/396) ## [0.1.15](https://github.com/qwikifiers/qwik-ui/compare/headless-0.1.14...headless-0.1.15) (2023-09-22) - ### Bug Fixes -* **bump qwik dep version:** bump qwik peer dep in packages ([10fc5ed](https://github.com/qwikifiers/qwik-ui/commit/10fc5edf7398792c84e22fdb78f19425462a6718)), closes [#396](https://github.com/qwikifiers/qwik-ui/issues/396) - - +- **bump qwik dep version:** bump qwik peer dep in packages ([10fc5ed](https://github.com/qwikifiers/qwik-ui/commit/10fc5edf7398792c84e22fdb78f19425462a6718)), closes [#396](https://github.com/qwikifiers/qwik-ui/issues/396) ## [0.1.14](https://github.com/qwikifiers/qwik-ui/compare/headless-0.1.13...headless-0.1.14) (2023-09-19) diff --git a/packages/utils/CHANGELOG.md b/packages/utils/CHANGELOG.md index 0cb82698c..296763171 100644 --- a/packages/utils/CHANGELOG.md +++ b/packages/utils/CHANGELOG.md @@ -4,10 +4,6 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/s ## [0.0.3](https://github.com/qwikifiers/qwik-ui/compare/utils-0.0.2...utils-0.0.3) (2023-12-01) - - ## [0.0.2](https://github.com/qwikifiers/qwik-ui/compare/utils-0.0.1...utils-0.0.2) (2023-12-01) - - ## 0.0.1 (2023-11-30) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 06eac2a91..fb97bc894 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,6 +11,12 @@ importers: '@fontsource-variable/inter': specifier: 5.0.8 version: 5.0.8 + canvas-confetti: + specifier: 1.9.2 + version: 1.9.2 + shiki: + specifier: 0.14.5 + version: 0.14.5 tslib: specifier: ^2.6.2 version: 2.6.2 @@ -252,9 +258,6 @@ importers: sass: specifier: ^1.66.1 version: 1.66.1 - shiki: - specifier: 0.14.5 - version: 0.14.5 storybook: specifier: ^7.4.0 version: 7.4.0 @@ -8295,7 +8298,6 @@ packages: /ansi-sequence-parser@1.1.1: resolution: {integrity: sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==} - dev: true /ansi-styles@2.2.1: resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} @@ -9176,6 +9178,10 @@ packages: resolution: {integrity: sha512-TKiyTVZxJGhsTszLuzb+6vUZSjVOAhClszBr2Ta2k9IwtNBT/4dzmL6aywt0HCgEZlmwJzXJd8yNiob6HgwTRg==} dev: true + /canvas-confetti@1.9.2: + resolution: {integrity: sha512-6Xi7aHHzKwxZsem4mCKoqP6YwUG3HamaHHAlz1hTNQPCqXhARFpSXnkC9TWlahHY5CG6hSL5XexNjxK8irVErg==} + dev: false + /capnp-ts@0.7.0: resolution: {integrity: sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==} dependencies: @@ -15089,7 +15095,6 @@ packages: /jsonc-parser@3.2.0: resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} - dev: true /jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} @@ -19230,7 +19235,6 @@ packages: jsonc-parser: 3.2.0 vscode-oniguruma: 1.7.0 vscode-textmate: 8.0.0 - dev: true /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} @@ -21395,11 +21399,9 @@ packages: /vscode-oniguruma@1.7.0: resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==} - dev: true /vscode-textmate@8.0.0: resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==} - dev: true /vue-template-compiler@2.7.14: resolution: {integrity: sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==}