* remove duplicate test * Add tests for sl-tab-group -- initial round of tests * use individual fixtures for each test * extract mocks + utility functions in external files * remove unnecessary internals of intersection observer from the mock * added first test on scroll buttons * add scrolling tests * remove resize observer mock Resize observer is triggered but waiting for element to be updated is not enough. You need to free the main thread with the test for some time * Also removed intersection observer mock By waiting long enough for the things to happen automatically * Fix problems with resize observer These problems appeared after npm ci but (according to the sources linked in the comments) unproblematic * Handle merge request comments * replace custom wait function with corresponding function from openwc/testing * Extracted waitForScrollingToEnd and isElementVisibleFromScrolling into dedicated files to be reused * Improve queryByTestId --> make it usable for more complex values * Add js docs * run lint fix * Added tests for selecting a tab by click * added further tests for tab group selection * use Promise<void> instead of Promise<any> to avoid eslint errors --------- Co-authored-by: Dominikus Hellgartner <dominikus.hellgartner@gmail.com>
Shoelace
A forward-thinking library of web components.
- Works with all frameworks 🧩
- Works with CDNs 🚛
- Fully customizable with CSS 🎨
- Includes an official dark theme 🌛
- Built with accessibility in mind ♿️
- Open source 😸
Designed in New Hampshire by Cory LaViska.
Documentation: shoelace.style
Source: github.com/shoelace-style/shoelace
Twitter: @shoelace_style
Shoemakers 🥾
Shoemakers, or "Shoelace developers," can use this documentation to learn how to build Shoelace from source. You will need Node >= 14.17 to build and run the project locally.
You don't need to do any of this to use Shoelace! This page is for people who want to contribute to the project, tinker with the source, or create a custom build of Shoelace.
If that's not what you're trying to do, the documentation website is where you want to be.
What are you using to build Shoelace?
Components are built with LitElement, a custom elements base class that provides an intuitive API and reactive data binding. The build is a custom script with bundling powered by esbuild.
Forking the Repo
Start by forking the repo on GitHub, then clone it locally and install dependencies.
git clone https://github.com/YOUR_GITHUB_USERNAME/shoelace
cd shoelace
npm install
Developing
Once you've cloned the repo, run the following command.
npm start
This will spin up the Shoelace dev server. After the initial build, a browser will open automatically. There is currently no hot module reloading (HMR), as browser's don't provide a way to reregister custom elements, but most changes to the source will reload the browser automatically.
The documentation is powered by Docsify, which uses raw markdown files to generate pages. As such, no static files are built for the docs.
Building
To generate a production build, run the following command.
npm run build
Creating New Components
To scaffold a new component, run the following command, replacing sl-tag-name with the desired tag name.
npm run create sl-tag-name
This will generate a source file, a stylesheet, and a docs page for you. When you start the dev server, you'll find the new component in the "Components" section of the sidebar.
Contributing
Shoelace is an open source project and contributions are encouraged! If you're interesting in contributing, please review the contribution guidelines first.
License
Shoelace is designed in New Hampshire by Cory LaViska. It’s available under the terms of the MIT license.
Designing, developing, and supporting this library requires a lot of time, effort, and skill. I’d like to keep it open source so everyone can use it, but that doesn’t provide me with any income.
Therefore, if you’re using my software to make a profit, I respectfully ask that you help fund its development by becoming a sponsor. There are multiple tiers to choose from with benefits at every level, including prioritized support, bug fixes, feature requests, and advertising.
👇 Your support is very much appreciated! 👇
Whether you're building Shoelace or building something with Shoelace — have fun creating! 🥾