README.md

# Hologram

## Roadmap

:white_check_mark:  ==  DONE

:construction:  ==  IN PROGRESS (partially done, some features work)

:x:  ==  TODO

### Runtime

#### Core

| Feature     | Status             | Comments                                                        |
| :---------- | :----------------: | :-------------------------------------------------------------- |
| Actions     | :white_check_mark: |                                                                 |
| Commands    | :white_check_mark: |                                                                 |
| Routing     | :construction:     | done: paths without params, todo: params                        |
| Session     | :x:                |                                                                 |

#### Template Engine

| Feature         | Status             | Comments                                                        |
| :-------------- | :----------------: | :-------------------------------------------------------------- |
| Components      | :construction:     | done: stateless/stateful components, todo: props DSL            |
| If Directive    | :construction:     | done: element nodes, todo: component nodes                      |
| Interpolation   | :white_check_mark: |                                                                 |
| Layouts         | :white_check_mark: |                                                                 |
| Navigation      | :white_check_mark: |                                                                 |
| Pages           | :white_check_mark: |                                                                 |
| Templates       | :construction:     | done: template in module, todo: template in separate file       |
| Two-Way Binding | :x:                |                                                                 |

#### Events

| Event          | Status             | Comments                                                        |
| :------------- | :----------------: | :-------------------------------------------------------------- |
| Blur           | :white_check_mark: |                                                                 |
| Change         | :construction:     | done: form tags, todo: input, select, textarea tags             |
| Click          | :construction:     | done: event handling, todo: event metadata                      |
| Focus          | :x:                |                                                                 |
| Key Down       | :x:                |                                                                 |
| Key Press      | :x:                |                                                                 |
| Key Up         | :x:                |                                                                 |
| Mouse Move     | :x:                |                                                                 |
| Params         | :x:                |                                                                 |
| Pointer Down   | :construction:     | done: event handling, todo: event metadata                      |
| Pointer Up     | :construction:     | done: event handling, todo: event metadata                      |
| Resize         | :x:                |                                                                 |
| Scroll         | :x:                |                                                                 |
| Select         | :x:                |                                                                 |
| Submit         | :white_check_mark: |                                                                 |
| Tap            | :x:                |                                                                 |
| Target         | :x:                |                                                                 |
| Touch Cancel   | :x:                |                                                                 |
| Touch End      | :x:                |                                                                 |
| Touch Move     | :x:                |                                                                 |
| Touch Start    | :x:                |                                                                 |
| Transition End | :white_check_mark: |                                                                 |

#### Tools

| Tool           | Status             |
| :------------- | :----------------: |
| Authentication | :x:                |
| Authorization  | :x:                |
| Caching        | :x:                |
| Code Reload    | :x:                |
| Localization   | :x:                |
| Time Travel    | :x:                |

### Elixir Syntax

#### Types

| Type               | Status             |
| :----------------- | :----------------: |
| Anonymous Function | :x:                |
| Atom               | :white_check_mark: |
| Binary             | :x:                |
| Bitstring          | :x:                |     
| Boolean            | :white_check_mark: |     
| Exception          | :x:                |     
| Float              | :white_check_mark: |     
| Integer            | :white_check_mark: |     
| IO Data            | :x:                |     
| List               | :white_check_mark: |     
| Map                | :white_check_mark: |     
| Nil                | :white_check_mark: |    
| Range              | :x:                |     
| Regex              | :x:                |     
| String             | :white_check_mark: |     
| Struct             | :white_check_mark: |   
| Tuple              | :white_check_mark: |     

#### Operators

##### Overridable General Operators

| Operator | Status             |
| :------- | :----------------: |
| unary +  | :x:                |
| unary -  | :x:                |
| +        | :white_check_mark: |
| -        | :x:                |
| *        | :x:                |
| /        | :x:                |
| ++       | :x:                |
| --       | :x:                |
| and      | :x:                |
| &&       | :white_check_mark: |
| or       | :x:                |
| \|\|     | :x:                |
| not      | :x:                |
| !        | :x:                |
| in       | :x:                |
| not in   | :x:                |
| @        | :white_check_mark: |
| ..       | :x:                |
| <>       | :x:                |
| \|>      | :x:                |
| =~       | :x:                |

##### Non-Overridable General Operators

| Operator | Status             |
| :------- | :----------------: |
| ^        | :x:                |
| .        | :white_check_mark: |
| =        | :white_check_mark: |
| &        | :x:                |
| ::       | :x:                |

##### Comparison Operators

| Operator | Status             |
| :------- | :----------------: |
| ==       | :white_check_mark: |
| ===      | :x:                |
| !=       | :x:                |
| !==      | :x:                |
| <        | :x:                |
| >        | :x:                |
| <=       | :x:                |
| =>       | :x:                |

##### Bitwise Module Operators

| Operator | Status             |
| :------- | :----------------: |
| &&&      | :x:                |
| ^^^      | :x:                |  
| <<<      | :x:                |  
| >>>      | :x:                |  
| \|\|\|   | :x:                |  
| ~~~      | :x:                |

#### Pattern Matching

| Type          | Status             |
| :------------ | :----------------: |
| Binary        | :x:                |
| Bitstring     | :x:                |
| Case          | :x:                |
| Comprehension | :x:                |
| List          | :x:                |
| Map           | :white_check_mark: |      
| Range         | :x:                |          
| Struct        | :x:                |          
| Tuple         | :x:                |          

#### Control Flow

| Structure     | Status             |
| :------------ | :----------------: |
| After         | :x:                |
| Case          | :x:                |
| Catch         | :x:                |
| Comprehension | :x:                |
| Cond          | :x:                |
| Else (If)     | :white_check_mark: |
| Else (Rescue) | :x:                |
| Guards        | :x:                |
| If            | :white_check_mark: |
| Raise         | :x:                |
| Rescue        | :x:                |
| Throw         | :x:                |
| Unless        | :x:                |
| With          | :x:                |

#### Definitions

| Structure        | Status             |
| :--------------- | :----------------: |
| Exception        | :x:                |
| Function Head    | :white_check_mark: |
| Macro            | :x:                |
| Module           | :white_check_mark: |
| Module Attribute | :white_check_mark: |
| Private Function | :white_check_mark: |
| Public Function  | :white_check_mark: |


#### Directives

| Directive        | Status             |
| :--------------- | :----------------: |
| Alias            | :white_check_mark: |
| Import           | :white_check_mark: |
| Multi-Alias      | :x:                |
| Require          | :white_check_mark: |
| Use              | :white_check_mark: |

#### Sigils

| Sigil | Status             |
| :---- | :----------------: |
| ~c    | :x:                |
| ~C    | :x:                |
| ~D    | :x:                |
| ~N    | :x:                |
| ~r    | :x:                |
| ~R    | :x:                |
| ~s    | :x:                |
| ~S    | :x:                |
| ~T    | :x:                |
| ~U    | :x:                |
| ~w    | :x:                |
| ~W    | :x:                |

#### Other

| Feature                        | Status             |
| :----------------------------- | :----------------: |
| Behaviours                     | :x:                |
| Codepoints                     | :x:                |
| Custom Sigils                  | :x:                |
| Default Arguments              | :x:                |
| Function Capturing             | :x:                |
| Map Update Syntax              | :x:                |
| Module Attribute Accumulation  | :x:                |
| Module \_\_info\_\_/1 callback | :white_check_mark: |
| Module Nesting                 | :x:                |
| Protocols                      | :x:                |
| Variable rebinding             | :x:                |

#### Not on Roadmap
* Types: PID, Port, Reference
* Control Flow: Exit, Receive
* Operators: Custom, Overriding
* Other: Erlang Libraries

### Work in progress

#### Runtime / Core / Commands
Done: commands trigerred by action\
Todo: commands trigerred by event