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

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

\graphicspath{ {./dot/} }

\setbeamercovered{transparent}

\title{enterprise}
\subtitle{UI Framework Project}
\author{Michael Zhang}
\date[\today]{SIFT Interview, \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{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 Ahead-of-time guarantees.
    \note{Another benefit of it being a compiler is that it is difficult to get run-time errors. If it compiles, it works.}

    \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 = "hello",
        }

        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{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.)
  \end{itemize}
\end{frame}

\end{document}
