SUID is all a set of utils and components ported from MUI Core and much more.

Overview

Solid.js User Interface Design (SUID)

GitHub Workflow Status npm (scoped) npm (scoped)
npm (scoped) npm (scoped) npm (scoped) npm (scoped) npm (scoped) npm (scoped)

A port of Material-UI (MUI) built with Solid.js

SUID is all a set of utils and components ported from MUI Core and much more.

MUI has one of the largest development communities on the scene, a long history, is used by large corporations, its level of customization is very detailed and has a future ahead. Why reinvent the wheel? The MUI problem is React and this is where SUID comes in.

The main idea behing the project is to create a bridge between the MUI and SUID repository for syncing the incoming changes. This is possible thanks to tools integrated in SUID like codemod (a React to Solid transformer).

With this smart target in mind, the project avoids becoming another library that could fall into oblivion, avoiding all its complexities, developing under the shadow of MUI.

Notice

The main branch will be locked due to SolidHack 2022. New changes will be pushed to the develop branch (https://next.suid.io).

If you want to support the project, you have the possibility to do so here.

Installation

npm install @suid/material

Resources

Roadmap

For details about the project status go here.

Development

Requirements

Startup

git clone https://github.com/swordev/suid
cd suid
pnpm install
pnpm build
pnpm start

Contributing

To contribute to the project, follow these steps:

  1. Fork this repository and clone it.
  2. Install the dependencies: pnpm install.
  3. Create a branch: git checkout -b .
  4. Make your changes and create the changeset file: pnpm changeset.
  5. Add your changes: git add .
  6. Commit your changes: git commit -m ''.
  7. Push to the original branch: git push origin .
  8. Create the pull request.

License

Distributed under the MIT License. See LICENSE file in each package for more information.

Comments
  • Security: expose a way to set nonce on style elements to conform to CSP policies

    Security: expose a way to set nonce on style elements to conform to CSP policies

    I came across this issue while trying to use SUID inside Tauri, which sets a strict CSP policy by default - and that prevents SUID styles from loading.

    A way to solve that problem is to specify a nonce attribute on <style> tags: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/style-src#unsafe_inline_styles

    I also tried updating the docs, but I didn't have much time, so I could've messed something up.

    opened by dolsem 10
  • codemod: add transform replaceReactUseRef

    codemod: add transform replaceReactUseRef

    note: looking back, react2solid should be implemented as an eslint plugin for example https://github.com/milahu/eslint-plugin-react2solid why? eslint is the most popular transformer = large ecosystem = reuse existing rules typescript is slow (except we use swc), typescript should be optional

    transform React.useRef

    -const divRef = React.useRef<HTMLDivElement>(null)
    +var divRef: HTMLDivElement | null = null;
    const div = <div ref={divRef}>asdf</div>
    -console.log(divRef.current)
    +console.log(divRef)
    

    not perfect but should work for most cases

    also

    fix #133 fix #136

    fix #135 (partial) - use toMatchInlineSnapshot to allow npx jest -u

    opened by milahu 8
  • Using Vite 4 Modal Failing to Open

    Using Vite 4 Modal Failing to Open

    FYI Something is failing, when using Vite 4.

    Click modal, nothing happens.

    https://stackblitz.com/edit/angular-vmqvmy-lv8str?file=src%2FApp.tsx,package.json

    But Vite Build, it works.

    Change Vite to 3.2.5 and works again.

    opened by codylindley 6
  • `@suid/utils` dont work with `solidjs/solid-start`

    `@suid/utils` dont work with `solidjs/solid-start` "type":"module"` `package.json`

    image ERROR Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/home/sdykae/mythings/readme-niubiz-documentation/node_modules/@suid/utils/deepmerge' imported from /home/sdykae/mythings/readme-niubiz-documentation/node_modules/@suid/utils/cloneObject.js at new NodeError (node:internal/errors:393:5) at finalizeResolution (node:internal/modules/esm/resolve:305:11) at moduleResolve (node:internal/modules/esm/resolve:866:10) at defaultResolve (node:internal/modules/esm/resolve:1074:11) at nextResolve (node:internal/modules/esm/loader:164:28) at ESMLoader.resolve (node:internal/modules/esm/loader:839:30) at ESMLoader.getModuleJob (node:internal/modules/esm/loader:426:18) at ModuleWrap. (node:internal/modules/esm/module_job:76:40) at link (node:internal/modules/esm/module_job:75:36) { code: 'ERR_MODULE_NOT_FOUND'

    you have to add import { isPlainObject } from "./deepmerge.js"; to resolve :(

    after that change It says

    image (node:577599) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension. (Use node --trace-warnings ... to show where the warning was created) ERROR /home/sdykae/mythings/readme-niubiz-documentation/node_modules/@suid/system/colorManipulator.js:21 export function hexToRgb(color) { ^^^^^^

    SyntaxError: Unexpected token 'export' at Object.compileFunction (node:vm:360:18) at wrapSafe (node:internal/modules/cjs/loader:1048:15) at Module._compile (node:internal/modules/cjs/loader:1083:27) at Module._extensions..js (node:internal/modules/cjs/loader:1173:10) at Module.load (node:internal/modules/cjs/loader:997:32) at Module._load (node:internal/modules/cjs/loader:838:12) at ModuleWrap. (node:internal/modules/esm/translators:170:29) at ModuleJob.run (node:internal/modules/esm/module_job:193:25) at async Promise.all (index 0) at async ESMLoader.import (node:internal/modules/esm/loader:528:24)

    bug 
    opened by sdykae 6
  • `styled` gets empty theme values

    `styled` gets empty theme values

    See here for a demo. In short, a component like this:

    const StyledDemo = styled('div')(({ theme }) => {
      console.log('THEME IS (styled)', theme);
      ...
    })
    

    will show an empty-ish theme value with many undefined keys (e.g. typography, palette, shadows, ...). However, if I build an otherwise identical component with useTheme like this:

    const UseThemeDemo = (props) => {
      const theme = useTheme();
      console.log('THEME IS (useTheme)', theme);
      ...
    };
    

    It will log an much more "full" theme value as I would expect. I do believe this is the behaviour we want. Here are both logs:

    image

    Interestingly, this bug seems to affect the second demo on the SUID docs on styled. The styled button does not appear because Uncaught TypeError: theme.palette is undefined.

    I've tried different versions of SUID/Solid but for some reason I can't find a combination that works. I've also tried explicitly setting a theme with ThemeProvider but that doesn't change anything to the "empty" theme values. I've also tested this on both chrome and firefox.

    bug 
    opened by evertheylen 5
  • [Bug] Uncaught TypeError: Cannot redefine property: color

    [Bug] Uncaught TypeError: Cannot redefine property: color

    Hi!

    I'm currently encountering a blocking error in one of my projects. Here is the code:

    export const SideNav: Component<SideNavProps> = (props: SideNavProps) => {
      return (
        <List>
          <ListItem disablePadding>
            <ListItemButton>
              <ListItemText primary="Hello" />
            </ListItemButton>
          </ListItem>
        </List>
      )
    }
    

    This generates the following error at runtime:

    dev.js:1283 Uncaught TypeError: Cannot redefine property: color
        at Function.defineProperties (<anonymous>)
        at mergeProps (dev.js:1283:14)
        at sx (extendSxProp.jsx:12:24)
        at get sx [as sx] (extendSxProp.jsx:21:20)
        at createStyled.jsx:20:29
        at Array.reduce (<anonymous>)
        at Object.fn (createStyled.jsx:14:36)
        at runComputation (dev.js:693:22)
        at updateComputation (dev.js:676:3)
        at createMemo (dev.js:238:10)
    

    Any idea what's causing this?

    I'm using Solid v1.6.0 and SUID v0.6.3.

    EDIT: Seems like the error is triggered by ListItemText. If I remove it, everything works fine.

    bug 
    opened by ClementNerma 4
  • vite-plugin-solid@>=2.3.3 has a breaking change and will not translate JSX elements for suid correctly

    vite-plugin-solid@>=2.3.3 has a breaking change and will not translate JSX elements for suid correctly

    On vite-plugin-solid >= 2.3.3, vite-plugin-solid will add .jsx and .tsx files to optimized dependencies. In such configuration, esbuild translate JSX elements to React.createElement in default settings, skips solidjs complier, and cause ReferenceError: React is not defined in most situation.

    On vite-plugin-solid >= 2.3.5, ryan scans exports in package.json for solid key to identify and exclude the package from optimized dependencies: https://github.com/solidjs/vite-plugin-solid/commit/cb6f269a79b6827bf4ef0e4411c081dc0aeda15e

    These changes break at least @suid/material's JSX elements.

    Related issue on solid-router repository: https://github.com/solidjs/solid-router/issues/165

    Possible solution: Add exports to package.json, for example:

    {
      "exports": {
        ".": {
          "solid": "./index.jsx",
          "default": "./index.jsx",
        }
      }
    }
    

    Workarounds:

    • Add this package to optimizeDeps.exclude of vitejs config
      export default defineConfig({
        optimizeDeps: {
            exclude: ["@suid/material"], // Workaround to [email protected] breaking change
        },
      })
      
    • Downgrade/upgrade to [email protected], which reverts related change: https://github.com/solidjs/vite-plugin-solid/commit/474858def50f269b0ff43ef232883f38cb3565b3
    opened by thislight 4
  • Astro SSR client:load Error: Cannot use import statement outside a module

    Astro SSR client:load Error: Cannot use import statement outside a module

    Hi. I have a astro project with my page written in solid-js and i want to use a simple TextInput. Here is a demo of that i'm trying to do: https://stackblitz.com/edit/github-xmtfif?file=src/pages/index.astro

    Error is:

    Cannot use import statement outside a module
    /home/projects/github-xmtfif/node_modules/@suid/base/createComponentFactory.js:1
    import composeClasses from "./composeClasses";
    

    Astro troubleshooting for this error: https://docs.astro.build/en/guides/troubleshooting/#cannot-use-import-statement-outside-a-module

    • I tried installing @suid/vite-plugin. Does not help.
    • Tried excluding @suid/material and @suid/base from vite ssr process like here: https://docs.astro.build/en/reference/configuration-reference/#vite (vite: { ssr: { external: ['@suid/material', '@suid/base'])

    I tried using noExternal instead: https://vitejs.dev/config/ssr-options.html#ssr-noexternal

          noExternal: [
            '@suid/material',
            '@suid/base',
            '@suid/system',
            '@suid/css',
            '@suid/utils',
            '@suid/styled-engine',
          ],
    

    And now the error is:

    ReferenceError: document is not defined
        at Module.findStyleElement [as default] (/node_modules/@suid/css/dom/findStyleElement.js:2:5)
        at /node_modules/@suid/styled-engine/createStyle.js:31:44
        at Proxy.createComputed (/home/projects/github-xmtfif/node_modules/solid-js/dist/server.cjs:56:5)
        at Module.createStyle (/node_modules/@suid/styled-engine/createStyle.js:22:4)
        at Box2 (Box.jsx:30:28)
        at Proxy.createComponent (/home/projects/github-xmtfif/node_modules/solid-js/dist/server.cjs:283:15)
        at createStyled.jsx:50:10
        at Proxy.createComponent (/home/projects/github-xmtfif/node_modules/solid-js/dist/server.cjs:283:15)
        at get children [as children] (FormControl.jsx:97:2)
        at eval (/home/projects/github-xmtfif/node_modules/solid-js/dist/server.cjs:187:35
    

    The only way to make it work is to load my page component with client:only="solid-js", but this means i don't have any ssr on the entire page.

    bug duplicate 
    opened by AndreiTelteu 4
  • Issues importing icons via Visual Studio Code

    Issues importing icons via Visual Studio Code

    Say I have an icon I create via: <CloseIcon onClick={() => setClosed(true)} />

    VS code is not able to suggest an import. I have to manually type it in: import CloseIcon from '@suid/icons-material/Close';

    Am I missing a dependency?

    opened by phong-phuong 4
  • Specify @suid/utils as strict ES6 module may break package resolving in webpack, if without changing the import statements in it

    Specify @suid/utils as strict ES6 module may break package resolving in webpack, if without changing the import statements in it

    After updating @suid/material to 0.4.0, I notice multiple errors from webpack:

    ERROR in ./node_modules/@suid/utils/merge.js 2:0-36
    Module not found: Error: Can't resolve './deepmerge' in '/path/to/project/node_modules/@suid/utils'
    Did you mean 'deepmerge.js'?
    BREAKING CHANGE: The request './deepmerge' failed to resolve only because it was resolved as fully specified
    (probably because the origin is strict EcmaScript Module, e. g. a module with javascript mimetype, a '*.mjs' file, or a '*.js' file where the package.json contains '"type": "module"').
    The extension in the request is mandatory for it to be fully specified.
    Add the extension to the request.
    resolve './deepmerge' in '/path/to/project/node_modules/@suid/utils'
      using description file: /path/to/project/node_modules/@suid/utils/package.json (relative path: .)
        Field 'browser' doesn't contain a valid alias configuration
        using description file: /path/to/project/node_modules/@suid/utils/package.json (relative path: ./deepmerge)
          Field 'browser' doesn't contain a valid alias configuration
          /path/to/project/node_modules/@suid/utils/deepmerge doesn't exist
     @ ./node_modules/@suid/material/styles/createComponents.jsx 7:0-38 13:33-38
     @ ./node_modules/@suid/material/styles/createTheme.jsx 7:0-54 43:11-27
     @ ./node_modules/@suid/material/styles/index.jsx 3:0-44 3:0-44
     @ ./node_modules/@suid/material/CssBaseline/CssBaseline.jsx 10:0-37 87:14-22
     @ ./node_modules/@suid/material/CssBaseline/index.jsx 1:0-40 1:0-40 2:0-30 2:0-30
     @ ./src/App.tsx 4:0-53 19:28-39
     @ ./src/index.tsx 3:0-24 17:35-38
    

    I notice a possible workaround: remove the "type": "module" in the package.json of the @suid/utils, https://github.com/swordev/suid/blame/main/packages/utils/package.json#L5 . Another possible fix is, as the error said, just use the name with the extension in the files of @suid/utils.

    My webpack config: https://pastebin.com/LCn5iH1z My package.json: https://pastebin.com/1NWNAw5A Complete log: https://pastebin.com/QmWcf7BL

    opened by thislight 4
  • How to properly use `inputRef` with TypeScript?

    How to properly use `inputRef` with TypeScript?

    Hello, I've been struggling to find a way to utilize the inputRef parameter on TextInput components.

    My use-case is needing to call .focus() on the input field inside onMount() (because autofocus doesn't work when navigating), but the reference passed via ref returns a <div>, not an <input>, which forces me to do this:

    (usernameRef?.firstChild as HTMLInputElement).focus();
    

    (...which somehow works even though firstChild is a <label>, not an <input>)

    It would be great if usernameRef?.focus() just worked but it doesn't, so I'm left with no other choice but to use the code above.

    I've tried using inputRef in many different ways but nothing seems to work because it takes a Ref<HTMLInputElement> type which I can't do anything with and I was not able to find any documentation or examples on how to use it.

    question 
    opened by NinoM4ster 3
  • Update vite-plugin to work with version 4

    Update vite-plugin to work with version 4

    Installation on the newest Solid (1.6.6) which uses Vite 4.0.3 ends with a following error:

    npm ERR! code ERESOLVE
    npm ERR! ERESOLVE could not resolve
    npm ERR! 
    npm ERR! While resolving: @suid/[email protected]
    npm ERR! Found: [email protected]
    npm ERR! node_modules/vite
    npm ERR!   peer vite@"^3.0.0 || ^4.0.0" from [email protected]
    npm ERR!   node_modules/vite-plugin-solid
    npm ERR!     dev vite-plugin-solid@"^2.5.0" from the root project
    npm ERR!   peerOptional vite@"^3.0.0 || ^4.0.0" from [email protected]
    npm ERR!   node_modules/vitefu
    npm ERR!     vitefu@"^0.2.3" from [email protected]
    npm ERR!     node_modules/vite-plugin-solid
    npm ERR!       dev vite-plugin-solid@"^2.5.0" from the root project
    npm ERR!   1 more (the root project)
    npm ERR! 
    npm ERR! Could not resolve dependency:
    npm ERR! peer vite@"^3.0.0" from @suid/[email protected]
    npm ERR! node_modules/@suid/vite-plugin
    npm ERR!   dev @suid/vite-plugin@"^0.1.0" from the root project
    

    etc...

    Forcing with --legacy-peer-deps however seems to be working without any issues. The only problem is that I need to add --legacy-peer-deps flag everytime I trigger npm install. It seems that it could be enough to fix package.json deps inside @suid/vite-plugin.

    opened by matulek 0
  • Can't use breakpoints in SX prop

    Can't use breakpoints in SX prop

    MUI docs: https://mui.com/system/getting-started/usage/#responsive-values

    When I use it as described the object is returned as the value and is not returned as media queries like in the React version.

    opened by madaxen86 0
  • Typography is not using the default Roboto font

    Typography is not using the default Roboto font

    Hi,

    I'm not sure if this is intentional, but since @suid/material v0.4.0 the <Typography /> component is no longer using the default font-family: "Roboto", "Helvetica", "Arial", sans-serif;

    For example, here's what the following snippets produces:

    import { Typography, Button } from '@suid/material';
    
    export default function App() {
      return (<>
        <Typography>
          Should be using Roboto Font
        </Typography>
        <hr />
        <Button variant="contained">
          <Typography>
            Should be using Roboto Font
          </Typography>
        </Button>
        <hr />
        <Button variant="contained">Should be using Roboto Font</Button>
      </>);
    }
    

    Update

    it seems all default styling (not only font-family) is not applied to <Typography /> component.

    The following are taken directly from the example at suid.io/components/typography: stackblitz.com/edit/angular-qgyehp

    image

    opened by IronGeek 1
  • Add support for makeStyles

    Add support for makeStyles

    makeStyle is a great way to separate the css in js from the rest of the logic and I find it easier to use than sx

    tss-react makes it possible to use it as per mui documentation, could it be possible to add the same for suid ?

    https://mui.com/material-ui/guides/interoperability/#jss-tss

    enhancement 
    opened by Plawn 0
  • Update versions

    Update versions

    This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

    Releases

    @suid/[email protected]

    Minor Changes

    • 06b378eb Thanks @juanrgm! - Return the class selector of the styled components

    • 289b37a5 Thanks @juanrgm! - Global refactoring for adopting the behaviour to MUI styled components

    Patch Changes

    @suid/[email protected]

    Minor Changes

    Patch Changes

    @suid/[email protected]

    Minor Changes

    • b36ed9b9 Thanks @juanrgm! - Export styled at @suid/material/styles

    • 289b37a5 Thanks @juanrgm! - Global refactoring for adopting the behaviour to MUI styled components

    Patch Changes

    @suid/[email protected]

    Minor Changes

    Patch Changes

    @suid/[email protected]

    Minor Changes

    • 06b378eb Thanks @juanrgm! - Return the class selector of the styled components

    • 289b37a5 Thanks @juanrgm! - Global refactoring for adopting the behaviour to MUI styled components

    Patch Changes

    @suid/[email protected]

    Minor Changes

    • 289b37a5 Thanks @juanrgm! - Global refactoring for adopting the behaviour to MUI styled components

    Patch Changes

    @suid/[email protected]

    Patch Changes

    [email protected]

    Patch Changes

    @suid/[email protected]

    Patch Changes

    @suid/[email protected]

    Patch Changes

    @suid/[email protected]

    Patch Changes

    @suid/[email protected]

    Patch Changes

    opened by github-actions[bot] 0
  •  Targeting another `styled` component within `styled`

    Targeting another `styled` component within `styled`

    I was wondering if behaviour like this is in any way supported:

    const SomeComponent = styled('div')({
      color: 'green',
    });
    
    const ParentComponent = styled('div')({
      [SomeComponent]: {
        color: 'pink',
      },
    });
    

    (stackblitz, but it might be of limited use)

    Emotion, the underlying library for MUI's styled function, does support it although you need a babel plugin.

    enhancement WIP 
    opened by evertheylen 0
Releases(@suid/[email protected])
The Easel Javascript library provides a full, hierarchical display list, a core interaction model, and helper classes to make working with the HTML5 Canvas element much easier.

EaselJS EaselJS is a library for building high-performance interactive 2D content in HTML5. It provides a feature-rich display list to allow you to ma

CreateJS 8k Dec 29, 2022
DevArms - a collection of developer utils that gives you extra arms to reach more in your tasks

DevArms is a collection of developer utils that gives you extra arms to reach more in your tasks. It runs completely offline, and cross-platform across Windows, Mac and Linux. Written in Rust, React. Powered by Tauri.

Qiushi Pan 82 Dec 18, 2022
Frontend template using react with MUI

Table of contents React-template Usage Build Vite Docker Linter Continuous integration Code documentation Technologies React-template This is a fronte

Jefferson Guiot 2 May 2, 2022
Super Mario 64 ported to JavaScript and WebAssembly via Emscripten.

SM64-JS Super Mario 64 ported to JavaScript and WebAssembly via Emscripten. REPL Takedown I was forced to take down the REPL for this project due to c

Sevenworks 12 Dec 23, 2022
solid material ui port (ported from blazor port)

solid-material-ui solid material ui port (porting from blazor port) In preparation for solid hack Turbo Mono-repository is used for component package

skclusive 18 Apr 30, 2022
Variant types in Roblox TypeScript - Ported from Vanilla TypeScript

Variant (for Roblox) This is a roblox typescript variant (heh, pun) of Variant. See the Variant documentation on how to use Variant. A variant type is

Australis 2 Jun 3, 2022
Activate The Open Web ™ ("Activate Windows" watermark ported to the web)

Activate-Web The "Activate Windows" watermark ported to Open Web ™. Inspired by activate-linux. As of 0.1, it’s a Web Component written in TypeScript,

Blair Noctis 8 Jun 6, 2022
Incredible resources (with links) to help up-skill yourselves on various fields. Resources like programming, designing, engineering and much more and completely Open Source.

Shiryoku Incredible resources (with links) to help up-skill yourselves on various fields. Resources like programming, designing, engineering and much

Kunal Keshan 22 Dec 15, 2022
NoExGen is a node.js express application generator with modern folder structure, namespace/project mapping and much more! It contains preconfigured Settings and Routing files, ready to be used in any project.

Installation $ npm install -g noexgen Quick Start You can use Node Package Execution to create your node-express application as shown below: Create th

Souvik Sen 7 Oct 8, 2022
Easily open daily notes for today in new tab, and much more!

Obsidian daily notes new tab This plugin adds a command for opening daily notes in a new tab (so that a keyboard shortcut could be used!) and gives ex

Xiao Meng 16 Dec 26, 2022
The jQuery plugin that brings select elements into the 21st century with intuitive multiselection, searching, and much more. Now with Bootstrap 5 support.

bootstrap-select The jQuery plugin that brings select elements into the 21st century with intuitive multiselection, searching, and much more. Now with

SnapAppointments 9.7k Dec 30, 2022
The jQuery plugin that brings select elements into the 21st century with intuitive multiselection, searching, and much more. Now with Bootstrap 5 support

bootstrap-select The jQuery plugin that brings select elements into the 21st century with intuitive multiselection, searching, and much more. Now with

SnapAppointments 9.7k Dec 30, 2022
🟢 Music player app with a modern homepage, fully-fledged music player, search, lyrics, song exploration features, search, popular music around you, worldwide top charts, and much more.

Music-player-app see the project here. 1. Key Features 2. Technologies I've used Key Features: ?? Fully responsive clean UI. ?? Entirely mobile respo

suraj ✨ 3 Nov 16, 2022
Simple utils to pack arrays, objects and strings to a flat object (and back again).

packrup Simple utils to pack (and unpack) arrays and strings to a flat object. Status: In Development Please report any issues ?? Made possible by my

Harlan Wilton 15 Dec 23, 2022
Temporal-time-utils - This is a library with some reusable functions for Temporal.io TypeScript SDK

temporal-time-utils This is a library with some reusable functions for Temporal.io TypeScript SDK: sleepUntil: sleep to a specific date, instead of by

swyx 15 Oct 18, 2022
Dm-utils - Utility classes for ioBroker adapters to support ioBroker.dm

dm-utils Utility classes for ioBroker adapters to support ioBroker.dm. How to use In your ioBroker adapter, add a subclass of DeviceManagement and ove

Samuel Weibel 1 Jan 2, 2022
SET Revision is a website to help you identify "sets" in the card game SET.

Welcome to SET Revision! SET Revision is a website to help you identify "sets" in the card game SET. The code in this repository is aimed for learners

Benjamin Piper 2 Oct 3, 2022
Backgrid.js is a set of components for building semantic and easily stylable data grid widgets

Backgrid.js is a set of components for building semantic and easily stylable data grid widgets. It offers a simple, intuitive programming interface that makes easy things easy, but hard things possible when dealing with tabular data.

Cloudflare Archive 2k Nov 21, 2022
A set of common UI Components using the power of CSS and without Javascript

A set of common UI Components using the power of CSS and without Javascript

Felipe Fialho 650 Dec 31, 2022