\documentclass{beamer}
% \usetheme{Boadilla}
\usetheme{Madrid}

\usepackage{bookmark}
\usepackage{graphicx}
\usepackage{fancyvrb}

\setbeamercovered{transparent}

\title{enterprise}
\subtitle{UI Framework Project}
\author{Michael Zhang}
\date{\today}

\begin{document}

\begin{frame}
  \titlepage
  \note{Briefly discuss what is enterprise, a bit about the origin of its name.}
\end{frame}

\begin{frame}
  \frametitle{What's out there today?}

  \begin{itemize}[<+>]
    \item React: Immediate-mode style framework
    \item Elm: Functional message-passing framework
    \item Svelte: Compile-time framework
    \item Roll your own... ?
  \end{itemize}
\end{frame}

\begin{frame}
  \frametitle{High-level goals}

  \begin{itemize}[<+>]
    \item Declarative-style programming.
    \note{In UI design, we really don't care about how the logic is implemented. We don't care how the browser draws the styles, or what order on-hover handlers are added to dropdowns.}

    \item No framework bloat.
    \note{enterprise is more like a compiler than a framework in the sense that the code it generates doesn't need to contain the actual compilation process.}

    \item Separation of business logic and implementation.
    \note{Talk about Epic?}
  \end{itemize}
\end{frame}

\begin{frame}[fragile]
  \frametitle{What do I have today?}

  \begin{itemize}
    \item Foundations for event analysis.
    \item WASM code generation.
  \end{itemize}

  Example:

  \begin{verbatim}
    component HelloWorld {
        model {
            name: String = "",
        }

        view {
            <input bind:value="name" />
            "Hello, " {name} "!"
        }
    }
  \end{verbatim}
\end{frame}

\begin{frame}
  \frametitle{How does it work?}

  \begin{enumerate}
    \item Parsing DSL syntax.
    \item Assemble dependency graph.
    \item Generate code.
  \end{enumerate}
\end{frame}

\include{parsing}

\include{deps}

\include{general}

\include{codegen}

\begin{frame}
  \frametitle{Future work}

  \begin{itemize}
    \item Full DSL, independent from Rust.
    \item Cassowary-based constraint solving for layout.
    \item Asynchronous event handlers.
    \item Eliminating unnecessary model stores.
    \item Connecting to other frameworks (GTK, Iced, etc.)
    \item Interpreted executor for fast prototyping.
    \item Backend code generation.
  \end{itemize}
\end{frame}

\end{document}
