MCPcopy Index your code
hub / github.com/Andy-set-studio/tatl

github.com/Andy-set-studio/tatl @v0.2.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.2.0 ↗ · + Follow
40 symbols 62 edges 4 files 11 documented · 28%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Tatl ✨

A tiny base component to guide you to a consistent Web Component authoring experience

⚠️ Tatl is a work in progress and very unstable. Feedback and contributions are very much encouraged. ⚠️

Demo https://tatl-demo.netlify.com

About

Tatl is a base class for Web Components that gives you a clean, consistent structure, much like a Vue component.

Getting started

Install Tatl via NPM:

npm install tatl

Import Tatl, the HTML helper and the component loader into your component file:

my-component.js

import {html, tatl} from 'tatl';

Then you can author your component like so:

my-component.js

const myComponent = tatl({
  props: {
    personName: {
      type: String,
      required: true
    }
  },
  state: {
    greeting: 'Hello'
  },
  render() {
    const {greeting} = this.state;
    const {personName} = this.props;

    return html`



         ${greeting}, there! My name is ${personName}



    `;
  }
});

export default myComponent;

index.html

<my-component person-name="Andy"></my-component>

What you get out of the box

Root definition

You can use a standard root, a closed Shadow DOM root or an open Shadow DOM root by specifying a root in your config object:

Key Value
standard A normal HTML root
shadow An open Shadow DOM root
shadow:closed A closed Shadow DOM root

Props

You pass props as HTML attributes on the component and then get access to them inside your component's JavaScript with this.props. See example in the demo.

<example-component class-name="a-class" required="true"></example-component>

You'll need to define your prop types, too, like so:

props: {
  className: {
    type: String,
    default: null
  },
  required: {
    type: Boolean,
    default: false
  }
}

You can see this in action in the demo component.

State

You can have reactive state by using the state property of your config object. Every time an element of your state is updated, your component will re-render.

You can access state with this.state in your components.

Getters

Getters are computed functions that are used like props in your templates.

Example

// Config object
get: {
  myGetter() {
    const name = 'Andy';
    return `Hello, I'm ${name}`;
  }
}

You can see a getter in action in the demo component.

Roadmap

  • [ ] 📝 Write some proper docs
  • [ ] 🏗 Implement a better HTML rendering setup, rather than innerHTML = this.render() 🙈
  • [x] 🏗 Find a way of auto loading components, rather than using the componentLoader
  • [ ] 🏗 Create more comprehensive demos

Core symbols most depended-on inside this repo

_processRender
called by 3
src/tatl.js
_processRender
called by 3
demo/js/tatl.js
_processProps
called by 2
src/tatl.js
_processProps
called by 2
demo/js/tatl.js
html
called by 2
demo/js/tatl.js
_monitor
called by 1
src/tatl.js
_processGetters
called by 1
src/tatl.js
_processRoot
called by 1
src/tatl.js

Shape

Method 25
Class 8
Function 7

Languages

TypeScript100%

Modules by API surface

src/tatl.js19 symbols
demo/js/tatl.js18 symbols
demo/js/components/input-field.js3 symbols

For agents

$ claude mcp add tatl \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page