Code Monkey home page Code Monkey logo

qwik-ui's Introduction


awesome logo of qwik ui

Qwik UI

The components library for Qwik

QWIK UI npm MIT All Contributors

Documentation

To read the complete docs, please visit qwikui.com


Installation of the headless components

npm install -D @qwik-ui/headless

Components Status

Headless Kit

Component Planned Draft (Alpha) Beta Stable
Accordion
Carousel
Combobox
Dialog
Modal
Pagination
Popover
Select
Separator
Tabs
Toggle
Tooltip

Contributing

Want to contribute? Yayy! 🎉

Please read and follow our Contributing Guidelines to learn what are the right steps to take before contributing your time, effort and code.

Thanks 🙏


Code Of Conduct

Be kind to each other and please read our code of conduct.


Contributors

Thanks goes to these wonderful people (emoji key):

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

📖 🚧
Alen Ajam
Alen Ajam

📖 🚧

This project follows the all-contributors specification. Contributions of any kind welcome!


Related Links

License

MIT

qwik-ui's People

Contributors

adamgen avatar allcontributors[bot] avatar balastrong avatar cwoolum avatar ditadi avatar dmitry-stepanenko avatar fabiobiondi avatar gilf avatar gioboa avatar github-actions[bot] avatar gparlakov avatar gregonnet avatar igalklebanov avatar ilteoood avatar itaim18 avatar luisbeqja avatar maiieul avatar naorpeled avatar nexontreehouse avatar nsdonato avatar patrickjs avatar reemardelarosa avatar shairez avatar shiroinegai avatar thejackshelton avatar themcnafaha avatar tleperou avatar wmertens avatar yishayhaz avatar zankel-engineering avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

qwik-ui's Issues

Prefer "class" over "className"

Reproduction

  • Starting the website
cd packages/website
npm start
  • The following warning is shown

CleanShot 2023-01-29 at 21 23 20@2x

Proposed solution

We might want to replace className with class.

Final thoughts

  • I am willing preparing a PR for it.

write a full headless select box + daisy component

Still missing:

  • Keyboard navigation
  • Verify ARIA is fully implemented by the spec
  • Fix the flickering issue
  • placeholder?
  • Design a theme-daisy implementation
  • Auto placements
  • storybook stories
  • component testing
  • multi-selection
  • disabled items (skip them)
  • arrow
  • hidden inputs for selected value / values (plus enabling selecting a complicated object and not just a primitive value with item[prop])
  • mouse clicking outside the list should close
  • transitions / animations
  • Grouping items

Add playwright tests

@gioboa wanted to work on this

We already have Cypress set up, which has a great DX (but no tests yet)
I wonder if we need to add playwright or is Cypress enough

Qwik's handling of preventDefault makes it difficult to create accessible behavior for keyboard events

This problem surfaced in trying to re-create native Select behavior.

Native Tab behavior on a select element activates the currently focused option and moves to the next tabbable element, usually the next form input element. As we have re-implemented the Select component without using native elements in favor of better styling capability, additional keyboard event listeners have to be implemented for accessibility.

However, Qwik currently only works with preventDefault as an attribute to an element like so:

<button preventDefault:onKeyUp>
</button>

and the following does not work:

<button onKeyUp$={(e) => {
    if (e.key === 'Tab') {
        e.preventDefault()
    }
}}>
</button>

This means that in order for us to recreate native Tab behavior for a Select component, we would have to set preventDefault on the element, and then re-implement existing behavior like Enter or Space to activate the element. This is potentially extra tedium or would clash with what users may expect when using Qwik UI in the future to compose their own components.

upgrade packages to latest

Upgrade all of the packages (especially the Qwik ones) to latest versions so we could update the qwik-nx plugin

Task `storybook:build-storybook` failes

Hi there

Great idea and work on this UI lib 🙏
Wanted to have a look at your storybook impl. end found this error below while building a static version of storybook.

 *  Executing task: npx nx run core:build-storybook 


> nx run core:build-storybook


>  NX  ui framework: @storybook/html


>  NX  Storybook builder starting ...

info => Cleaning outputDir: /Users/zanettin/development/tests/qwik-ui/dist/storybook/core
info => Loading presets
info => Loading custom manager config
info => Compiling manager..
info => Loading custom manager config
vite v3.2.1 building for production...
transforming (616) ../../node_modules/@mdx-js/react/dist/esm.js
🌼 daisyUI components 2.38.0  https://github.com/saadeghi/daisyui
  ✔︎ Including:  base, components, themes[29], utilities
  
✓ 1052 modules transformed.
[vite]: Rollup failed to resolve import "@qwik-city-plan" from "packages/core/src/s_aaalzkh0klq.js".
This is most likely unintended because it can break your application at runtime.
If you do want to externalize this module explicitly add it to
`build.rollupOptions.external`
transforming (1258) ../../node_modules/lodash/_cacheHas.jsinfo => Manager built (21 s)

 >  NX   [vite]: Rollup failed to resolve import "@qwik-city-plan" from "packages/core/src/s_aaalzkh0klq.js".

   This is most likely unintended because it can break your application at runtime.
   If you do want to externalize this module explicitly add it to
   `build.rollupOptions.external`
   Pass --verbose to see the stacktrace.


 ———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

 >  NX   Ran target build-storybook for project core (23s)
 
    ✖    1/1 failed
    ✔    0/1 succeeded [0 read from cache]
 
   See Nx Cloud run details at https://nx.app/runs/4wHL3jkmOH


 *  The terminal process "/bin/zsh '-c', 'npx nx run core:build-storybook'" terminated with exit code: 1. 
 *  Terminal will be reused by tasks, press any key to close it. 

Add "merge" to class / className

Currently the `...props` is overriding the inner `class` of the component

for example:

<Alert class="alert-success">Message</Alert>

Will not render correctly because it'll replace the built in alert class inside the component

We need to merge them so both alert and alert-success will be part of the inner component's css class

Introduce a style guide

A style guide should be written to maintain consistency across contributions.

E.g. Including a Signal suffix at the end of variables that utilizes Qwik's useSignal

Add dialog component

Motivation

A Dialog is an UX-concept that is often used in projects.
We can provide a Dialog having an API that guides developers through the most common use cases:

  • Responsiveness
  • Animations/Transitions
  • Dragging
  • Scrolling long Content

Inspiration

Next Steps

  • Study implementation of a11y-dialog
  • Study implementation of react-a11y-dialog
  • Come up with API-Design (hook-API for headless UI vs. component-API)
  • Write Tests
  • Write documentation
  • Research features of other libraries
    • Sticky Actions Bar for long scrolling content (comes with Dialog.Actions)
    • Display Dialog as FullScreen
    • Allow custom open/close Animations
    • Allow Dragging Dialog
  • Decide which features make it into the BETA

Headless UI?

Accessibility is super important in my environment, and DaisyUI has real issues when it comes to accessibility.

Have you considered using a UI set like Headless UI that puts accessibility first?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.