# TAMIS SOLID Components

Lit-based web-components library (`@startinblox/component-tamis`) that renders the **TAMIS** frontend on top of the Startin'blox SOLID framework (`sibStore`, `sibRouter`, Orbit). It is the client counterpart to [`djangoldp-tamis`](https://git.startinblox.com/djangoldp-packages/djangoldp-tamis) and consumes its LDP resources directly — there is no custom API.

## User-facing flow

TAMIS is a post-production coordination tool for clients (broadcasters, studios) and providers (post-production houses). The components in this library compose into the four screens that drive the daily workflow:

- **Prestations** — the operator's main workspace. A list/cards/table view of every prestation the user can access (driven by their group memberships on the backend), with a detail page showing the prestation's header, its delivery → validation timeline, the linked editorial work, and the deliverable assets attached to it. Rejecting a delivery here is what triggers the backend signal that re-queues another `Livraison` + `Validation` round.
- **Commandes** — the order-level view. Lists every `Commande` (a Client/Provider purchase order) with its status and the prestations underneath, so a project manager can see all the work scoped under a single order.
- **Assets** — the deliverables view. Browses the files produced by a prestation (`MediaResource`s and their audio/video tracks), grouped per asset, with copy/preview UI primitives.
- **Profile / Favourites** — per-user pages: enterprise/title/job/phone (from `TamisProfile`) and pinned prestations (`Favourite`) for quick re-entry.

On boot, `solid-autologin-menu` warms the SOLID store with every container the app needs so that subsequent navigation is instant rather than waterfall-fetched. All access control is enforced server-side by `djangoldp-tamis` — the components simply render whatever the user is allowed to see.

## What it provides

A set of `<solid-tamis-*>` custom elements, organised by domain:

- `components/orbit/` — top-level menu entries plugged into Orbit (`solid-tamis-prestation-menu`, `…-commande-menu`, `…-asset-menu`, `…-favourite-menu`, `…-profile-menu`/`-top`) plus `solid-autologin-menu`, which prewarms `sibStore` with every TAMIS container (`series/`, `seasons/`, `programmes/`, `editorialworks/`, `commandes/`, `prestations/`, `prestationsteps/`, `steptotemplates/`, `assets/`, `mediaresources/`, `tracks/`, `videotracks/`, `audiotracks/`, `steps/`, `agents/`, `clients/`, `providers/`, `formats/`, `identifiants/`, `users/`, `groups/`) at load time.
- `components/common/` — shared views: prestation cards/table/timeline, prestation detail header, commande table, linked-prestation display, breadcrumb, back button, folder/asset/media displays, and form helpers (identifiant form, reactive select, form-value-to-dict).
- `components/asset/`, `components/commande/`, `components/dashboard/`, `components/prestation/`, `components/profile/` — page-level compositions.
- `components/ui/` — primitives (`button`, `collapsible`, `copy`, `popover`, `tag`).
- `helpers/orbitComponent.js` — a `LitElement` base with helpers to expand LDP proxy values, walk `ldp:contains`, cherry-pick serializer fields, and subscribe to route/resource changes (`setupComponentSubscriptions`, `setupCacheInvalidation`, `setupCacheOnResourceReady`, `setupOnSaveReset`, `requestNavigation`).
- `tamis.d.ts` — TypeScript interfaces for every resource (`Prestation`, `EditorialWork`, `Commande`, `Asset`, `MediaResource`, …) mirroring the djangoldp-tamis serializer output.
- Icons are pulled from `@iconify-json/simple-line-icons` via `unplugin-icons` and auto-defined as web components.

Distributed as an ESM library (`dist/index.js`) built from `src/index.js`, which eagerly glob-imports every `components/**/*.js`. In dev mode it logs the detected `window.orbit`, `sibStore`, and `sibRouter` for inspection.

## Build

```sh
npm install
npm run watch    # vite dev server
npm run build    # produces dist/ (ESM, target esnext, browserslist: last 2 Chrome)
npm run serve    # vite preview of the built library
```

Path aliases: `@components`, `@helpers`, `@styles` → `src/components`, `src/helpers`, `src/styles`.

## Installation in an application

See the [client installation guide](https://git.startinblox.com/applications/tamis-poc/-/snippets/16).
