# YellowJacket Frontend

This directory contains the frontend for YellowJacket.

## Dependencies

There are a couple of tools that are required to build and use the frontend.

- [`vite`](https://vite.dev/) for
  - transpiling typescript
  - bundling the final "package" that is useb by the webview
  - running a dev server with hot-reloading
  - configured with the [`vite.config.ts`](./vite.config.ts) file in this directory
- [`pnpm`](https://pnpm.io/) for managing frontend dependency packages

There are a handful of dependency packages that we use directly in the frontend.

- [`picocss`](https://picocss.com) for basic CSS while developing
- [`lit`](https://lit.dev) for a simple but powerful wrapper around [Web Components](https://developer.mozilla.org/en-US/docs/Web/API/Web_components)

Lastly, there are some dependencies that only benefit development

- `tsserver` comes bundled with vscode and can be used as an LSP with other editors using [`typescript-language-server`](https://github.com/typescript-language-server/typescript-language-server)
  - Used for autocomplete, syntax highlighting, etc.
  - This can be configured with the `tsconfig.json` file in the root of the project
    - NOTE: your configuration should align with the `vite` config so you get in-editor feedback that aligns with how the build will be done.

## Development

Ideally, you would use the frontend in the wails app as the frontend depends on the Go bindings generated by Wails.
You can do this by running `wails dev` in the root of the YellowJacket repo.

If you want to run the frontend standalone, make sure the Wails go bindings have been generated with `wails generate modules`.
Then, you can run `pnpm dev` to run the vite dev server.
For more information on what commands are available, refer to `package.json`.

## Code

### Web Components

Our frontend is based off of Web Components, a standard that provides native browser encapsulation of components that can include HTML, CSS and Javascript all together.
Instead of writing these components manually in Javascript, we utilize `lit` as a wrapper library.

### Typescript

To better integrate with our tooling and to provide a better developer experience with strong typing, we have written all functional frontend code in Typescript.
Vite serves as our Typescript transpiler.

### Important Files and Directories

NOTE: most of these directories have aliases defined in `tsconfig.json` and `vite.config.ts` so that we may refer to them by shorthand when importing.

- `index.html` and `index.js` is the entrypoint for the frontend. The first page that loads.
- `wailsjs/go` Go code bindings generated by wails reside here
- `wailsjs/runtime` the Wails runtime code needed to use Wails features
- `src` all app code resides here
- `src/assets` static assets like fonts, images and icons
- `src/components` lit components that are used to compose the application
- `src/pages` pages that serve as other entrypoints for the application that can be navigated to
