Repository files navigation

component-party.test?

In an effort to better understand the up-coming changes in Svelte5, this fork of component-party.dev adds unit testing, and Storybook rendering (because some things just have to be visualised!). Most of the original examples are covered, but to cover the rest I'll have to figure out how to add SvelteKit...

Semi-bun-able

Faster dev using bun (but mostly vite/vitest until bun's test/svelte/HMR support is more mature)

bun i
bun run test
bun run storybook

Component Party πŸŽ‰

Web component JS frameworks quick overview by their syntax and features

Website: https://component-party.dev

πŸ€” Why ?

Many JS developers don't have a good overview of every existing JS framework with their own syntax and features. How do we solve this ? Developers love having framework overview by examples. It's a quick introduction before going deeper.

πŸ”₯ Progression

Svelte 4
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
React
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Vue 3
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Angular
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Lit
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Vue 2
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Ember
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
SolidJS
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Alpine
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Mithril
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Aurelia 2
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Qwik
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Marko
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Aurelia 1
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Svelte 5 (preview)
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing

🀝 Contributing

This site is built with Vite and Svelte. Site content is written in Markdown format located in content. For simple edits, you can directly edit the file on GitHub and generate a Pull Request.

For local development, pnpm is preferred as package manager:

pnpm i
pnpm run dev

This project requires Node.js to be v16.0.0 or higher.

Principle when add/edit a framework snippet

Clarity is better than optimization for Component Party

In Component Party, we prioritize clarity over optimization as our core educational focus. We aim to simplify complex overviews of different JS frameworks for easy understanding, rather than presenting over-optimized solutions. We believe that deep understanding should precede optimization, enabling learners to master the frameworks' use and discover optimization techniques independently. This approach aligns with our commitment to fostering accessible and effective learning in the field of web component JavaScript frameworks.

Add a new framework

  1. Fork the project and create a new branch
  2. Add the new framework SVG logo in public/framework
  3. Install the ESLint plugin associated to the framework
  4. In frameworks.mjs, add a new entry with SVG link and ESLint configuration
  5. If the framework needs a language syntax highlight, add it to the call to getHighlighter’s langs argument in build/lib/generateContent.js
  6. To make a playground link:
    1. Add a create${FRAMEWORK}Playground.js file in build/lib/playground.
    2. That file should export a function that returns an object with a fromContentByFilename method that accepts an object of filepath keys and file content values, then returns an absolute URL to a framework’s online REPL with those files loaded.
    3. Register its export in build/lib/playground/index.js

πŸ§‘β€πŸ’» Contributors

This project exists thanks to all the people who contribute. [Contribute]. Contributors

βš–οΈ License

MIT. Made with πŸ’–

About

πŸŽ‰ Web component JS frameworks overview by their syntax and features

Resources

Contributing

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

component-party.test?

In an effort to better understand the up-coming changes in Svelte5, this fork of component-party.dev adds unit testing, and Storybook rendering (because some things just have to be visualised!). Most of the original examples are covered, but to cover the rest I'll have to figure out how to add SvelteKit...

Semi-bun-able

Faster dev using bun (but mostly vite/vitest until bun's test/svelte/HMR support is more mature)

bun i
bun run test
bun run storybook

Component Party πŸŽ‰

Web component JS frameworks quick overview by their syntax and features

Website: https://component-party.dev

πŸ€” Why ?

Many JS developers don't have a good overview of every existing JS framework with their own syntax and features. How do we solve this ? Developers love having framework overview by examples. It's a quick introduction before going deeper.

πŸ”₯ Progression

Svelte 4
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
React
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Vue 3
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Angular
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Lit
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Vue 2
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Ember
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
SolidJS
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Alpine
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Mithril
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Aurelia 2
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Qwik
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Marko
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Aurelia 1
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Svelte 5 (preview)
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing

🀝 Contributing

This site is built with Vite and Svelte. Site content is written in Markdown format located in content. For simple edits, you can directly edit the file on GitHub and generate a Pull Request.

For local development, pnpm is preferred as package manager:

pnpm i
pnpm run dev

This project requires Node.js to be v16.0.0 or higher.

Principle when add/edit a framework snippet

Clarity is better than optimization for Component Party

In Component Party, we prioritize clarity over optimization as our core educational focus. We aim to simplify complex overviews of different JS frameworks for easy understanding, rather than presenting over-optimized solutions. We believe that deep understanding should precede optimization, enabling learners to master the frameworks' use and discover optimization techniques independently. This approach aligns with our commitment to fostering accessible and effective learning in the field of web component JavaScript frameworks.

Add a new framework

  1. Fork the project and create a new branch
  2. Add the new framework SVG logo in public/framework
  3. Install the ESLint plugin associated to the framework
  4. In frameworks.mjs, add a new entry with SVG link and ESLint configuration
  5. If the framework needs a language syntax highlight, add it to the call to getHighlighter’s langs argument in build/lib/generateContent.js
  6. To make a playground link:
    1. Add a create${FRAMEWORK}Playground.js file in build/lib/playground.
    2. That file should export a function that returns an object with a fromContentByFilename method that accepts an object of filepath keys and file content values, then returns an absolute URL to a framework’s online REPL with those files loaded.
    3. Register its export in build/lib/playground/index.js

πŸ§‘β€πŸ’» Contributors

This project exists thanks to all the people who contribute. [Contribute]. Contributors

βš–οΈ License

MIT. Made with πŸ’–

About

πŸŽ‰ Web component JS frameworks overview by their syntax and features

Resources

Contributing

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

component-party.test?

In an effort to better understand the up-coming changes in Svelte5, this fork of component-party.dev adds unit testing, and Storybook rendering (because some things just have to be visualised!). Most of the original examples are covered, but to cover the rest I'll have to figure out how to add SvelteKit...

Semi-bun-able

Faster dev using bun (but mostly vite/vitest until bun's test/svelte/HMR support is more mature)

bun i
bun run test
bun run storybook

Component Party πŸŽ‰

Web component JS frameworks quick overview by their syntax and features

Website: https://component-party.dev

πŸ€” Why ?

Many JS developers don't have a good overview of every existing JS framework with their own syntax and features. How do we solve this ? Developers love having framework overview by examples. It's a quick introduction before going deeper.

πŸ”₯ Progression

Svelte 4
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
React
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Vue 3
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Angular
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Lit
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Vue 2
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Ember
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
SolidJS
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Alpine
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Mithril
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Aurelia 2
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Qwik
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Marko
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Aurelia 1
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Svelte 5 (preview)
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing

🀝 Contributing

This site is built with Vite and Svelte. Site content is written in Markdown format located in content. For simple edits, you can directly edit the file on GitHub and generate a Pull Request.

For local development, pnpm is preferred as package manager:

pnpm i
pnpm run dev

This project requires Node.js to be v16.0.0 or higher.

Principle when add/edit a framework snippet

Clarity is better than optimization for Component Party

In Component Party, we prioritize clarity over optimization as our core educational focus. We aim to simplify complex overviews of different JS frameworks for easy understanding, rather than presenting over-optimized solutions. We believe that deep understanding should precede optimization, enabling learners to master the frameworks' use and discover optimization techniques independently. This approach aligns with our commitment to fostering accessible and effective learning in the field of web component JavaScript frameworks.

Add a new framework

  1. Fork the project and create a new branch
  2. Add the new framework SVG logo in public/framework
  3. Install the ESLint plugin associated to the framework
  4. In frameworks.mjs, add a new entry with SVG link and ESLint configuration
  5. If the framework needs a language syntax highlight, add it to the call to getHighlighter’s langs argument in build/lib/generateContent.js
  6. To make a playground link:
    1. Add a create${FRAMEWORK}Playground.js file in build/lib/playground.
    2. That file should export a function that returns an object with a fromContentByFilename method that accepts an object of filepath keys and file content values, then returns an absolute URL to a framework’s online REPL with those files loaded.
    3. Register its export in build/lib/playground/index.js

πŸ§‘β€πŸ’» Contributors

This project exists thanks to all the people who contribute. [Contribute]. Contributors

βš–οΈ License

MIT. Made with πŸ’–

About

πŸŽ‰ Web component JS frameworks overview by their syntax and features

Resources

Contributing

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

component-party.test?

In an effort to better understand the up-coming changes in Svelte5, this fork of component-party.dev adds unit testing, and Storybook rendering (because some things just have to be visualised!). Most of the original examples are covered, but to cover the rest I'll have to figure out how to add SvelteKit...

Semi-bun-able

Faster dev using bun (but mostly vite/vitest until bun's test/svelte/HMR support is more mature)

bun i
bun run test
bun run storybook

Component Party πŸŽ‰

Web component JS frameworks quick overview by their syntax and features

Website: https://component-party.dev

πŸ€” Why ?

Many JS developers don't have a good overview of every existing JS framework with their own syntax and features. How do we solve this ? Developers love having framework overview by examples. It's a quick introduction before going deeper.

πŸ”₯ Progression

Svelte 4
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
React
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Vue 3
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Angular
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Lit
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Vue 2
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Ember
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
SolidJS
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Alpine
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Mithril
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Aurelia 2
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Qwik
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Marko
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Aurelia 1
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Svelte 5 (preview)
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing

🀝 Contributing

This site is built with Vite and Svelte. Site content is written in Markdown format located in content. For simple edits, you can directly edit the file on GitHub and generate a Pull Request.

For local development, pnpm is preferred as package manager:

pnpm i
pnpm run dev

This project requires Node.js to be v16.0.0 or higher.

Principle when add/edit a framework snippet

Clarity is better than optimization for Component Party

In Component Party, we prioritize clarity over optimization as our core educational focus. We aim to simplify complex overviews of different JS frameworks for easy understanding, rather than presenting over-optimized solutions. We believe that deep understanding should precede optimization, enabling learners to master the frameworks' use and discover optimization techniques independently. This approach aligns with our commitment to fostering accessible and effective learning in the field of web component JavaScript frameworks.

Add a new framework

  1. Fork the project and create a new branch
  2. Add the new framework SVG logo in public/framework
  3. Install the ESLint plugin associated to the framework
  4. In frameworks.mjs, add a new entry with SVG link and ESLint configuration
  5. If the framework needs a language syntax highlight, add it to the call to getHighlighter’s langs argument in build/lib/generateContent.js
  6. To make a playground link:
    1. Add a create${FRAMEWORK}Playground.js file in build/lib/playground.
    2. That file should export a function that returns an object with a fromContentByFilename method that accepts an object of filepath keys and file content values, then returns an absolute URL to a framework’s online REPL with those files loaded.
    3. Register its export in build/lib/playground/index.js

πŸ§‘β€πŸ’» Contributors

This project exists thanks to all the people who contribute. [Contribute]. Contributors

βš–οΈ License

MIT. Made with πŸ’–

About

πŸŽ‰ Web component JS frameworks overview by their syntax and features

Resources

Contributing

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

component-party.test?

In an effort to better understand the up-coming changes in Svelte5, this fork of component-party.dev adds unit testing, and Storybook rendering (because some things just have to be visualised!). Most of the original examples are covered, but to cover the rest I'll have to figure out how to add SvelteKit...

Semi-bun-able

Faster dev using bun (but mostly vite/vitest until bun's test/svelte/HMR support is more mature)

bun i
bun run test
bun run storybook

Component Party πŸŽ‰

Web component JS frameworks quick overview by their syntax and features

Website: https://component-party.dev

πŸ€” Why ?

Many JS developers don't have a good overview of every existing JS framework with their own syntax and features. How do we solve this ? Developers love having framework overview by examples. It's a quick introduction before going deeper.

πŸ”₯ Progression

Svelte 4
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
React
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Vue 3
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Angular
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Lit
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Vue 2
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Ember
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
SolidJS
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Alpine
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Mithril
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Aurelia 2
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Qwik
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Marko
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Aurelia 1
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Svelte 5 (preview)
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing

🀝 Contributing

This site is built with Vite and Svelte. Site content is written in Markdown format located in content. For simple edits, you can directly edit the file on GitHub and generate a Pull Request.

For local development, pnpm is preferred as package manager:

pnpm i
pnpm run dev

This project requires Node.js to be v16.0.0 or higher.

Principle when add/edit a framework snippet

Clarity is better than optimization for Component Party

In Component Party, we prioritize clarity over optimization as our core educational focus. We aim to simplify complex overviews of different JS frameworks for easy understanding, rather than presenting over-optimized solutions. We believe that deep understanding should precede optimization, enabling learners to master the frameworks' use and discover optimization techniques independently. This approach aligns with our commitment to fostering accessible and effective learning in the field of web component JavaScript frameworks.

Add a new framework

  1. Fork the project and create a new branch
  2. Add the new framework SVG logo in public/framework
  3. Install the ESLint plugin associated to the framework
  4. In frameworks.mjs, add a new entry with SVG link and ESLint configuration
  5. If the framework needs a language syntax highlight, add it to the call to getHighlighter’s langs argument in build/lib/generateContent.js
  6. To make a playground link:
    1. Add a create${FRAMEWORK}Playground.js file in build/lib/playground.
    2. That file should export a function that returns an object with a fromContentByFilename method that accepts an object of filepath keys and file content values, then returns an absolute URL to a framework’s online REPL with those files loaded.
    3. Register its export in build/lib/playground/index.js

πŸ§‘β€πŸ’» Contributors

This project exists thanks to all the people who contribute. [Contribute]. Contributors

βš–οΈ License

MIT. Made with πŸ’–

About

πŸŽ‰ Web component JS frameworks overview by their syntax and features

Resources

Contributing

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

component-party.test?

In an effort to better understand the up-coming changes in Svelte5, this fork of component-party.dev adds unit testing, and Storybook rendering (because some things just have to be visualised!). Most of the original examples are covered, but to cover the rest I'll have to figure out how to add SvelteKit...

Semi-bun-able

Faster dev using bun (but mostly vite/vitest until bun's test/svelte/HMR support is more mature)

bun i
bun run test
bun run storybook

Component Party πŸŽ‰

Web component JS frameworks quick overview by their syntax and features

Website: https://component-party.dev

πŸ€” Why ?

Many JS developers don't have a good overview of every existing JS framework with their own syntax and features. How do we solve this ? Developers love having framework overview by examples. It's a quick introduction before going deeper.

πŸ”₯ Progression

Svelte 4
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
React
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Vue 3
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Angular
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Lit
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Vue 2
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Ember
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
SolidJS
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Alpine
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Mithril
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Aurelia 2
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Qwik
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Marko
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Aurelia 1
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Svelte 5 (preview)
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing

🀝 Contributing

This site is built with Vite and Svelte. Site content is written in Markdown format located in content. For simple edits, you can directly edit the file on GitHub and generate a Pull Request.

For local development, pnpm is preferred as package manager:

pnpm i
pnpm run dev

This project requires Node.js to be v16.0.0 or higher.

Principle when add/edit a framework snippet

Clarity is better than optimization for Component Party

In Component Party, we prioritize clarity over optimization as our core educational focus. We aim to simplify complex overviews of different JS frameworks for easy understanding, rather than presenting over-optimized solutions. We believe that deep understanding should precede optimization, enabling learners to master the frameworks' use and discover optimization techniques independently. This approach aligns with our commitment to fostering accessible and effective learning in the field of web component JavaScript frameworks.

Add a new framework

  1. Fork the project and create a new branch
  2. Add the new framework SVG logo in public/framework
  3. Install the ESLint plugin associated to the framework
  4. In frameworks.mjs, add a new entry with SVG link and ESLint configuration
  5. If the framework needs a language syntax highlight, add it to the call to getHighlighter’s langs argument in build/lib/generateContent.js
  6. To make a playground link:
    1. Add a create${FRAMEWORK}Playground.js file in build/lib/playground.
    2. That file should export a function that returns an object with a fromContentByFilename method that accepts an object of filepath keys and file content values, then returns an absolute URL to a framework’s online REPL with those files loaded.
    3. Register its export in build/lib/playground/index.js

πŸ§‘β€πŸ’» Contributors

This project exists thanks to all the people who contribute. [Contribute]. Contributors

βš–οΈ License

MIT. Made with πŸ’–

About

πŸŽ‰ Web component JS frameworks overview by their syntax and features

Resources

Contributing

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

component-party.test?

In an effort to better understand the up-coming changes in Svelte5, this fork of component-party.dev adds unit testing, and Storybook rendering (because some things just have to be visualised!). Most of the original examples are covered, but to cover the rest I'll have to figure out how to add SvelteKit...

Semi-bun-able

Faster dev using bun (but mostly vite/vitest until bun's test/svelte/HMR support is more mature)

bun i
bun run test
bun run storybook

Component Party πŸŽ‰

Web component JS frameworks quick overview by their syntax and features

Website: https://component-party.dev

πŸ€” Why ?

Many JS developers don't have a good overview of every existing JS framework with their own syntax and features. How do we solve this ? Developers love having framework overview by examples. It's a quick introduction before going deeper.

πŸ”₯ Progression

Svelte 4
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
React
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Vue 3
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Angular
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Lit
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Vue 2
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Ember
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
SolidJS
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Alpine
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Mithril
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Aurelia 2
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Qwik
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Marko
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Aurelia 1
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Svelte 5 (preview)
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing

🀝 Contributing

This site is built with Vite and Svelte. Site content is written in Markdown format located in content. For simple edits, you can directly edit the file on GitHub and generate a Pull Request.

For local development, pnpm is preferred as package manager:

pnpm i
pnpm run dev

This project requires Node.js to be v16.0.0 or higher.

Principle when add/edit a framework snippet

Clarity is better than optimization for Component Party

In Component Party, we prioritize clarity over optimization as our core educational focus. We aim to simplify complex overviews of different JS frameworks for easy understanding, rather than presenting over-optimized solutions. We believe that deep understanding should precede optimization, enabling learners to master the frameworks' use and discover optimization techniques independently. This approach aligns with our commitment to fostering accessible and effective learning in the field of web component JavaScript frameworks.

Add a new framework

  1. Fork the project and create a new branch
  2. Add the new framework SVG logo in public/framework
  3. Install the ESLint plugin associated to the framework
  4. In frameworks.mjs, add a new entry with SVG link and ESLint configuration
  5. If the framework needs a language syntax highlight, add it to the call to getHighlighter’s langs argument in build/lib/generateContent.js
  6. To make a playground link:
    1. Add a create${FRAMEWORK}Playground.js file in build/lib/playground.
    2. That file should export a function that returns an object with a fromContentByFilename method that accepts an object of filepath keys and file content values, then returns an absolute URL to a framework’s online REPL with those files loaded.
    3. Register its export in build/lib/playground/index.js

πŸ§‘β€πŸ’» Contributors

This project exists thanks to all the people who contribute. [Contribute]. Contributors

βš–οΈ License

MIT. Made with πŸ’–

About

πŸŽ‰ Web component JS frameworks overview by their syntax and features

Resources

Contributing

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

component-party.test?

In an effort to better understand the up-coming changes in Svelte5, this fork of component-party.dev adds unit testing, and Storybook rendering (because some things just have to be visualised!). Most of the original examples are covered, but to cover the rest I'll have to figure out how to add SvelteKit...

Semi-bun-able

Faster dev using bun (but mostly vite/vitest until bun's test/svelte/HMR support is more mature)

bun i
bun run test
bun run storybook

Component Party πŸŽ‰

Web component JS frameworks quick overview by their syntax and features

Website: https://component-party.dev

πŸ€” Why ?

Many JS developers don't have a good overview of every existing JS framework with their own syntax and features. How do we solve this ? Developers love having framework overview by examples. It's a quick introduction before going deeper.

πŸ”₯ Progression

Svelte 4
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
React
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Vue 3
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Angular
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Lit
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Vue 2
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Ember
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
SolidJS
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Alpine
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Mithril
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Aurelia 2
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Qwik
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Marko
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Aurelia 1
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing
Svelte 5 (preview)
  • Reactivity
    • Declare state
    • Update state
    • Computed state
  • Templating
    • Minimal template
    • Styling
    • Loop
    • Event click
    • Dom ref
    • Conditional
  • Lifecycle
    • On mount
    • On unmount
  • Component composition
    • Props
    • Emit to parent
    • Slot
    • Slot fallback
    • Context
  • Form input
    • Input text
    • Checkbox
    • Radio
    • Select
  • Webapp features
    • Render app
    • Fetch data
    • Router link
    • Routing

🀝 Contributing

This site is built with Vite and Svelte. Site content is written in Markdown format located in content. For simple edits, you can directly edit the file on GitHub and generate a Pull Request.

For local development, pnpm is preferred as package manager:

pnpm i
pnpm run dev

This project requires Node.js to be v16.0.0 or higher.

Principle when add/edit a framework snippet

Clarity is better than optimization for Component Party

In Component Party, we prioritize clarity over optimization as our core educational focus. We aim to simplify complex overviews of different JS frameworks for easy understanding, rather than presenting over-optimized solutions. We believe that deep understanding should precede optimization, enabling learners to master the frameworks' use and discover optimization techniques independently. This approach aligns with our commitment to fostering accessible and effective learning in the field of web component JavaScript frameworks.

Add a new framework

  1. Fork the project and create a new branch
  2. Add the new framework SVG logo in public/framework
  3. Install the ESLint plugin associated to the framework
  4. In frameworks.mjs, add a new entry with SVG link and ESLint configuration
  5. If the framework needs a language syntax highlight, add it to the call to getHighlighter’s langs argument in build/lib/generateContent.js
  6. To make a playground link:
    1. Add a create${FRAMEWORK}Playground.js file in build/lib/playground.
    2. That file should export a function that returns an object with a fromContentByFilename method that accepts an object of filepath keys and file content values, then returns an absolute URL to a framework’s online REPL with those files loaded.
    3. Register its export in build/lib/playground/index.js

πŸ§‘β€πŸ’» Contributors

This project exists thanks to all the people who contribute. [Contribute]. Contributors

βš–οΈ License

MIT. Made with πŸ’–

About

πŸŽ‰ Web component JS frameworks overview by their syntax and features

Resources

Contributing

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages