From 6f6f0d6e6d2eca09196c02dc728509c3ccbbdf9d Mon Sep 17 00:00:00 2001 From: Vishesh 'ironeagle' Bangotra Date: Tue, 20 Oct 2026 13:00:11 +0530 Subject: [PATCH] =?UTF-8?q?chore:=20refresh=20collected=20sites=20?= =?UTF-8?q?=E2=80=94=20adopt=20vet,=20sync=20react-openapi=20bundle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit collect.py run: adds the vet reference app (TypeDoc lib site + doc-weaver MCP bundle), picks up the refreshed react-openapi specExtensions module from Phase 1, and re-renders the docs homepage. --- _index/index.html | 7 + react-openapi/mcp/modules/react-openapi.json | 60 +- vet/lib/.nojekyll | 1 + vet/lib/assets/hierarchy.js | 1 + vet/lib/assets/highlight.css | 92 + vet/lib/assets/icons.js | 18 + vet/lib/assets/icons.svg | 1 + vet/lib/assets/main.js | 60 + vet/lib/assets/navigation.js | 1 + vet/lib/assets/search.js | 1 + vet/lib/assets/style.css | 1611 +++++++++++++++++ vet/lib/functions/src_Footer.default.html | 3 + vet/lib/functions/src_Header.default.html | 5 + vet/lib/functions/src_Home.default.html | 5 + .../src_shared-theme_AppTheme.default.html | 11 + ...d-theme_themeConfig.getSemanticColors.html | 9 + ...theme_themePrimitives.getDesignTokens.html | 8 + vet/lib/index.html | 1 + ...ared-theme_themeConfig.SemanticColors.html | 17 + .../interfaces/src_vite-env.ImportMeta.html | 12 + .../src_vite-env.ImportMetaEnv.html | 8 + vet/lib/modules/src_Footer.html | 6 + vet/lib/modules/src_Header.html | 6 + vet/lib/modules/src_Home.html | 13 + vet/lib/modules/src_main.html | 6 + vet/lib/modules/src_openapi-config.html | 5 + .../modules/src_shared-theme_AppTheme.html | 9 + ...ared-theme_customizations_dataDisplay.html | 4 + ..._shared-theme_customizations_feedback.html | 4 + ...rc_shared-theme_customizations_inputs.html | 5 + ...hared-theme_customizations_navigation.html | 5 + ..._shared-theme_customizations_surfaces.html | 4 + .../modules/src_shared-theme_themeConfig.html | 5 + .../src_shared-theme_themePrimitives.html | 6 + vet/lib/modules/src_vite-env.html | 1 + .../src_shared-theme_AppTheme.ColorMode.html | 2 + ...d-theme_themeConfig.SemanticColorMode.html | 2 + .../src_openapi-config.specConfiguration.html | 8 + ...hared-theme_AppTheme.ColorModeContext.html | 2 + ...dataDisplay.dataDisplayCustomizations.html | 2 + ...tions_feedback.feedbackCustomizations.html | 2 + ...mizations_inputs.inputsCustomizations.html | 2 + ...s_navigation.navigationCustomizations.html | 2 + ...tions_surfaces.surfacesCustomizations.html | 2 + ...rc_shared-theme_themePrimitives.brand.html | 2 + ...ed-theme_themePrimitives.colorSchemes.html | 2 + ...src_shared-theme_themePrimitives.gray.html | 2 + ...rc_shared-theme_themePrimitives.green.html | 2 + ...c_shared-theme_themePrimitives.orange.html | 2 + .../src_shared-theme_themePrimitives.red.html | 2 + ..._shared-theme_themePrimitives.shadows.html | 2 + ...rc_shared-theme_themePrimitives.shape.html | 2 + ...ared-theme_themePrimitives.typography.html | 2 + vet/mcp/index.json | 6 + vet/mcp/modules/Footer.json | 16 + vet/mcp/modules/Header.json | 16 + vet/mcp/modules/Home.json | 16 + vet/mcp/modules/main.json | 8 + vet/mcp/modules/openapi-config.json | 16 + vet/mcp/modules/shared-theme.AppTheme.json | 30 + ...ared-theme.customizations.dataDisplay.json | 16 + .../shared-theme.customizations.feedback.json | 16 + .../shared-theme.customizations.inputs.json | 16 + ...hared-theme.customizations.navigation.json | 16 + .../shared-theme.customizations.surfaces.json | 16 + vet/mcp/modules/shared-theme.themeConfig.json | 53 + .../modules/shared-theme.themePrimitives.json | 79 + vet/mcp/modules/src_vite-env.json | 132 ++ vet/mcp/nav.json | 58 + 69 files changed, 2562 insertions(+), 1 deletion(-) create mode 100644 vet/lib/.nojekyll create mode 100644 vet/lib/assets/hierarchy.js create mode 100644 vet/lib/assets/highlight.css create mode 100644 vet/lib/assets/icons.js create mode 100644 vet/lib/assets/icons.svg create mode 100644 vet/lib/assets/main.js create mode 100644 vet/lib/assets/navigation.js create mode 100644 vet/lib/assets/search.js create mode 100644 vet/lib/assets/style.css create mode 100644 vet/lib/functions/src_Footer.default.html create mode 100644 vet/lib/functions/src_Header.default.html create mode 100644 vet/lib/functions/src_Home.default.html create mode 100644 vet/lib/functions/src_shared-theme_AppTheme.default.html create mode 100644 vet/lib/functions/src_shared-theme_themeConfig.getSemanticColors.html create mode 100644 vet/lib/functions/src_shared-theme_themePrimitives.getDesignTokens.html create mode 100644 vet/lib/index.html create mode 100644 vet/lib/interfaces/src_shared-theme_themeConfig.SemanticColors.html create mode 100644 vet/lib/interfaces/src_vite-env.ImportMeta.html create mode 100644 vet/lib/interfaces/src_vite-env.ImportMetaEnv.html create mode 100644 vet/lib/modules/src_Footer.html create mode 100644 vet/lib/modules/src_Header.html create mode 100644 vet/lib/modules/src_Home.html create mode 100644 vet/lib/modules/src_main.html create mode 100644 vet/lib/modules/src_openapi-config.html create mode 100644 vet/lib/modules/src_shared-theme_AppTheme.html create mode 100644 vet/lib/modules/src_shared-theme_customizations_dataDisplay.html create mode 100644 vet/lib/modules/src_shared-theme_customizations_feedback.html create mode 100644 vet/lib/modules/src_shared-theme_customizations_inputs.html create mode 100644 vet/lib/modules/src_shared-theme_customizations_navigation.html create mode 100644 vet/lib/modules/src_shared-theme_customizations_surfaces.html create mode 100644 vet/lib/modules/src_shared-theme_themeConfig.html create mode 100644 vet/lib/modules/src_shared-theme_themePrimitives.html create mode 100644 vet/lib/modules/src_vite-env.html create mode 100644 vet/lib/types/src_shared-theme_AppTheme.ColorMode.html create mode 100644 vet/lib/types/src_shared-theme_themeConfig.SemanticColorMode.html create mode 100644 vet/lib/variables/src_openapi-config.specConfiguration.html create mode 100644 vet/lib/variables/src_shared-theme_AppTheme.ColorModeContext.html create mode 100644 vet/lib/variables/src_shared-theme_customizations_dataDisplay.dataDisplayCustomizations.html create mode 100644 vet/lib/variables/src_shared-theme_customizations_feedback.feedbackCustomizations.html create mode 100644 vet/lib/variables/src_shared-theme_customizations_inputs.inputsCustomizations.html create mode 100644 vet/lib/variables/src_shared-theme_customizations_navigation.navigationCustomizations.html create mode 100644 vet/lib/variables/src_shared-theme_customizations_surfaces.surfacesCustomizations.html create mode 100644 vet/lib/variables/src_shared-theme_themePrimitives.brand.html create mode 100644 vet/lib/variables/src_shared-theme_themePrimitives.colorSchemes.html create mode 100644 vet/lib/variables/src_shared-theme_themePrimitives.gray.html create mode 100644 vet/lib/variables/src_shared-theme_themePrimitives.green.html create mode 100644 vet/lib/variables/src_shared-theme_themePrimitives.orange.html create mode 100644 vet/lib/variables/src_shared-theme_themePrimitives.red.html create mode 100644 vet/lib/variables/src_shared-theme_themePrimitives.shadows.html create mode 100644 vet/lib/variables/src_shared-theme_themePrimitives.shape.html create mode 100644 vet/lib/variables/src_shared-theme_themePrimitives.typography.html create mode 100644 vet/mcp/index.json create mode 100644 vet/mcp/modules/Footer.json create mode 100644 vet/mcp/modules/Header.json create mode 100644 vet/mcp/modules/Home.json create mode 100644 vet/mcp/modules/main.json create mode 100644 vet/mcp/modules/openapi-config.json create mode 100644 vet/mcp/modules/shared-theme.AppTheme.json create mode 100644 vet/mcp/modules/shared-theme.customizations.dataDisplay.json create mode 100644 vet/mcp/modules/shared-theme.customizations.feedback.json create mode 100644 vet/mcp/modules/shared-theme.customizations.inputs.json create mode 100644 vet/mcp/modules/shared-theme.customizations.navigation.json create mode 100644 vet/mcp/modules/shared-theme.customizations.surfaces.json create mode 100644 vet/mcp/modules/shared-theme.themeConfig.json create mode 100644 vet/mcp/modules/shared-theme.themePrimitives.json create mode 100644 vet/mcp/modules/src_vite-env.json create mode 100644 vet/mcp/nav.json diff --git a/_index/index.html b/_index/index.html index 59635af..aa2dfa0 100644 --- a/_index/index.html +++ b/_index/index.html @@ -106,6 +106,13 @@ view lib +
+

Vet

+

Full-stack reference application — OpenAPI-first FastAPI server paired with the spec-driven React admin client (@aetoskia/react-openapi + @aetoskia/react-auth).

+
+ view lib +
+
diff --git a/react-openapi/mcp/modules/react-openapi.json b/react-openapi/mcp/modules/react-openapi.json index cea1634..eecd595 100644 --- a/react-openapi/mcp/modules/react-openapi.json +++ b/react-openapi/mcp/modules/react-openapi.json @@ -2,7 +2,7 @@ "module": "react-openapi", "content": { "path": "react-openapi", - "docstring": "`react-openapi` - a spec-driven admin UI for OpenAPI/REST backends.\r\n\r\nPoint it at an OpenAPI document and it derives a full CRUD admin (list,\r\ndetail, create/edit, filtering, FK selects, streaming views) from the paths\r\nand schemas, plus optional profile screens and auth wiring. No per-resource\r\nhand-written screens are required.\r\n\r\n# Quick start\r\n\r\n```tsx\r\nimport { AppProvider, Admin } from \"react-openapi\";\r\n\r\n\r\n \r\n\r\n```\r\n\r\n# How it works\r\n\r\n- `AppProvider` loads the spec, validates it, builds a `ResourceConfig` per\r\n collection, parses `x-profile` operations, derives auth endpoints and\r\n initializes the shared axios client.\r\n- `useAppContext` exposes that state; `useResource(name)` adds CRUD helpers\r\n and filter widgets for one resource.\r\n- `Admin` renders the sidebar + routes; the field renderers\r\n (`ListCellRenderer`, `DetailFieldRenderer`, `FormFieldRenderer`) turn each\r\n `FieldConfig` into the right UI; `SseStreamView` renders live streams.\r\n\r\n# Spec extensions\r\n\r\n- `x-primary-key`, `x-display-format`, `x-list-columns`, `x-order`,\r\n `x-label`, `x-description`, `x-hidden`, `x-filterable`, `x-sortable`,\r\n `x-ui-type`, `x-edit-as`, `x-autocomplete`\r\n- `x-fk` (foreign keys), inline `$ref`/`oneOf` object handling\r\n- `x-upload`/`x-upload-url` (file/image fields)\r\n- `x-sse` (streaming collections)\r\n- `x-profile` (current-user operations)\r\n- `securitySchemes.bearerAuth` `x-server-url`, `x-login-path`,\r\n `x-register-path`, `x-logout-path`, `x-me-path`, `x-introspect-path`\r\n\r\n# Notes\r\n\r\n- Requires React 18, React Router and MUI (all peer/consumed deps).\r\n- `Admin` and `ProfileRoutes` must be nested inside an `AppProvider` and a\r\n router.", + "docstring": "`@aetoskia/react-openapi` - a spec-driven admin UI for OpenAPI/REST\r\nbackends (npm.aetoskia.com).\r\n\r\nPoint it at an OpenAPI document and it derives a full CRUD admin (list,\r\ndetail, create/edit, filtering, FK selects, streaming views) from the paths\r\nand schemas, plus optional profile screens and auth wiring. No per-resource\r\nhand-written screens are required.\r\n\r\n# Quick start\r\n\r\n```tsx\r\nimport { AppProvider, Admin } from \"@aetoskia/react-openapi\";\r\n\r\n\r\n \r\n\r\n```\r\n\r\n# How it works\r\n\r\n- `AppProvider` loads the spec, validates it, builds a `ResourceConfig` per\r\n collection, parses `x-profile` operations, derives auth endpoints and\r\n initializes the shared axios client.\r\n- `useAppContext` exposes that state; `useResource(name)` adds CRUD helpers\r\n and filter widgets for one resource.\r\n- `Admin` renders the sidebar + routes; the field renderers\r\n (`ListCellRenderer`, `DetailFieldRenderer`, `FormFieldRenderer`) turn each\r\n `FieldConfig` into the right UI; `SseStreamView` renders live streams.\r\n\r\n# Spec extensions\r\n\r\nThe canonical, agent-facing catalog of every `x-` extension this library\r\nunderstands lives in `src/spec-extensions.ts` and is exported here as\r\n`specExtensions` (plus `responseConventions`, `pathConventions`,\r\n`paginationConventions`, `validationRules`). It is rendered into the\r\n`react-openapi` MCP bundle by doc-weaver — read it from\r\n`docs://modules/react-openapi` when authoring or validating a spec.\r\n\r\nLevels covered: schema (`x-resource`, `x-primary-key`, `x-display-format`,\r\n`x-list-columns`), property (`x-label`, `x-order`, `x-description`,\r\n`x-hidden`, `x-filterable`, `x-sortable`, `x-fk`, `x-edit-as`,\r\n`x-ui-type`, `x-upload-url`, `x-upload`, `x-autocomplete`), path\r\n(`x-sse`), operation (`x-profile`), and securityScheme (`x-server-url`,\r\n`x-login-path`, `x-register-path`, `x-logout-path`, `x-me-path`,\r\n`x-introspect-path`).\r\n\r\n# Notes\r\n\r\n- Requires React 18, React Router and MUI (peer dependencies).\r\n- `Admin` and `ProfileRoutes` must be nested inside an `AppProvider` and a\r\n router.\r\n- Pair with `@aetoskia/react-auth` for the auth-server login/register/\r\n session layer; feed its `tokenStore` into `SpecConfiguration.getToken`.", "objects": { "AdminProps": { "name": "AdminProps", @@ -644,6 +644,57 @@ } } }, + "SpecExtensionDoc": { + "name": "SpecExtensionDoc", + "kind": "interface", + "path": "react-openapi.SpecExtensionDoc", + "signature": "SpecExtensionDoc", + "docstring": "Agent-facing index entry for one `x-` extension.\n\nThe behavioral documentation for each extension is in this file's module\ndocs (rendered onto the `specExtensions` export in the MCP bundle); this\narray is the machine-readable index of where each extension attaches and\nwhether it is required.", + "members": { + "example": { + "name": "example", + "kind": "property", + "path": "react-openapi.SpecExtensionDoc.example", + "signature": "example: string", + "docstring": "Minimal usage example." + }, + "level": { + "name": "level", + "kind": "property", + "path": "react-openapi.SpecExtensionDoc.level", + "signature": "level: ExtensionLevel", + "docstring": "Where the extension attaches." + }, + "name": { + "name": "name", + "kind": "property", + "path": "react-openapi.SpecExtensionDoc.name", + "signature": "name: string", + "docstring": "Extension name including the `x-` prefix, e.g. `\"x-primary-key\"`." + }, + "required": { + "name": "required", + "kind": "property", + "path": "react-openapi.SpecExtensionDoc.required", + "signature": "required: boolean", + "docstring": "`true` when the admin refuses to render the resource without it." + }, + "value": { + "name": "value", + "kind": "property", + "path": "react-openapi.SpecExtensionDoc.value", + "signature": "value: string", + "docstring": "YAML value shape, e.g. `\"string\"`, `\"string[]\"`, `\"{ resource, prefetch }\"`." + } + } + }, + "ExtensionLevel": { + "name": "ExtensionLevel", + "kind": "type-alias", + "path": "react-openapi.ExtensionLevel", + "signature": "ExtensionLevel: \"schema\" | \"property\" | \"path\" | \"operation\" | \"securityScheme\"", + "docstring": "Where an `x-` extension attaches in the OpenAPI document." + }, "FkResolver": { "name": "FkResolver", "kind": "type-alias", @@ -651,6 +702,13 @@ "signature": "FkResolver: Promise", "docstring": "Resolve a foreign-key wire value (e.g. an id) to the object to send.\n\n**Parameters:**\n\n- `resourceName` — The target resource name.\n- `fkValue` — The FK value to resolve.\n\n**Returns:**\n\nThe resolved object (or the original value when unresolved)." }, + "specExtensions": { + "name": "specExtensions", + "kind": "variable", + "path": "react-openapi.specExtensions", + "signature": "specExtensions: SpecExtensionDoc[]", + "docstring": "# OpenAPI `x-` extension catalog (canonical, agent-facing)\n\nThis export is the **canonical machine-readable reference** for every\nvendor extension `react-openapi` understands. Its docstring is rendered\nverbatim into the `react-openapi` MCP bundle by doc-weaver — agents\nbuilding or validating a spec should read it from\n`docs://modules/react-openapi` (object `specExtensions`) rather than\ninferring extensions from examples. The human-facing guide is the package\nREADME; the reference application is `aetos/react/vet` (its\n`server/openapi.yaml` uses nearly every extension below).\n\n## How the spec drives the UI\n\n`AppProvider` loads the OpenAPI document at runtime, validates it, and —\nfor every schema carrying `x-resource` — derives a `ResourceConfig` from\nthe schema's properties and the matching paths. `Admin` then renders a\nsidebar, list/detail/form routes, FK dropdowns and SSE streams from those\nconfigs. No per-resource React code is required; adding a domain to the\nbackend surfaces it in the admin automatically.\n\n## Levels\n\nExtensions attach at five places: **schema** (on a `components.schemas`\nobject; marks a resource), **property** (inside a resource schema's\n`properties`), **path** (on a path item), **operation** (on an operation\nobject), and **securityScheme** (on the `bearerAuth` scheme).\n\n## Required vs optional / strictness\n\nA missing **required** extension is a spec **error**: the admin shows the\nvalidation screen and refuses to render the affected resource. Missing\noptional extensions degrade gracefully (defaults noted below). There are\nno fallbacks for required extensions and no flexible response parsing —\nthe spec is the contract and the admin throws at transform time when it is\nviolated.\n\n## Schema-level extensions\n\n- **`x-resource` (REQUIRED, string)** — marks a schema as an admin\n resource and names its collection path segment (`\"pets\"` maps to\n GET/POST `/pets`). Schemas without it are skipped entirely (use that for\n shared shapes like `Metadata` or error bodies). The value must match an\n existing path; the validator errors if missing.\n- **`x-primary-key` (REQUIRED, string)** — property that uniquely\n identifies a record; used as the `{id}` path parameter in every item\n request and as the FK wire value unless `x-fk.value` overrides it. Must\n reference a property that exists. Validator error if missing.\n- **`x-display-format` (REQUIRED, string template)** — template with\n `{propertyName}` placeholders rendered as the record's human label in\n list rows, detail titles and FK dropdown options, e.g. `\"{name} - #{id}\"`.\n Validator error if missing.\n- **`x-list-columns` (REQUIRED, string[])** — ordered property names shown\n as datatable columns; every entry must exist in `properties`. Cell\n display uses the target resource's `x-display-format` for FK fields and\n the parent resource's formatting for direct fields. Validator error if\n missing or invalid.\n\n## Property-level extensions\n\n- **`x-label` (REQUIRED, string)** — human-readable label for form fields,\n table headers and detail views. Required on every property of a resource\n schema; validator error if missing.\n- **`x-order` (REQUIRED, integer)** — field ordering in forms and detail\n views; lower first, ties broken alphabetically. Required (non-null) on\n every property; validator error if missing. List columns follow\n `x-list-columns`, not `x-order`.\n- **`x-description` (optional, string)** — helper text below form fields\n and placeholder text; falls back to `x-label`.\n- **`x-hidden` (optional, `{ form?, list?, detail? }`)** — per-view\n visibility; missing keys default to false (visible). Typical use: hide\n the auto-generated primary key from forms/lists.\n- **`x-filterable` (optional, boolean, default false)** — marks the field\n as filterable in the datatable filter bar.\n- **`x-sortable` (optional, boolean, default false)** — adds sort controls\n to the column header; clicking sends `?sort=field` (ascending) or\n `?sort=-field` (descending) to the list endpoint in server mode.\n- **`x-fk` (optional, `{ resource, prefetch?, value? }`)** — marks a\n `$ref` property as a foreign key. Non-array → `FkSelectField` (dropdown);\n array with `items.$ref` → `FkMultiSelectField` (multi-select). `resource`\n is the target's `x-resource` value (not the schema name) and must exist;\n the target must have `x-display-format` + `x-primary-key`. `prefetch=true`\n loads all options on mount, false (default) on focus. Options are fetched\n with `GET /{resource}?limit=0` for paginated targets (`limit=0` is the\n server convention for \"all records\") and formatted with the target's\n `x-display-format`. `value` names the wire-value property (defaults to\n the target's primary key). A `$ref` WITHOUT `x-fk` renders read-only\n inline (chips in list/detail, disabled JSON text field in forms).\n- **`x-edit-as` (optional, `\"date\"`)** — edit a date-time property with a\n plain date input; submits midnight of the chosen day.\n- **`x-ui-type` (optional, `\"image\" | \"currency\"`)** — `\"image\"` renders a\n file-upload form field with preview (Avatar in list/detail); with\n `x-upload-url` set and a record id present it POSTs the file there\n (`{id}` substituted) and stores the response URL, otherwise it falls back\n to an inline base64 data URL. `\"currency\"` renders a currency field (also\n settable per-field via `SpecConfiguration.resourceConfig.fieldTypes`).\n- **`x-upload-url` (optional, string path template)** — POST endpoint for\n `x-ui-type: image` uploads, e.g. `/pets/{id}/photo`.\n- **`x-upload` (optional, `{ type, url }`)** — generic file upload; the\n file is POSTed as raw `application/octet-stream` to `url` with a\n `Content-Disposition: attachment; filename=\"...\"` header; the response\n must contain a `saved_as` field which becomes the stored value. `type` is\n one of `image | pdf | html | csv | file` (Avatar vs clickable chip\n display, chip has delete/replace).\n- **`x-autocomplete` (optional, `\"text\" | \"token\" | \"email\" | \"phone\"`)** —\n server-side filter-bar widget hint for text-ish fields.\n\n## Path-level extensions\n\n- **`x-sse` (optional on a path item, boolean)** — marks a path as a\n Server-Sent Events stream. Excluded from CRUD derivation;\n `SseStreamView`/`useItemSse` connect with an EventSource and render the\n streaming resource's records as they arrive. The 200 response must be\n `text/event-stream`; give the event schema display metadata\n (`x-display-format`, `x-list-columns`, `x-primary-key`) so stream rows\n render like a list. Path parameters are supported\n (e.g. `/pets/{id}/actions`).\n\n## Operation-level extensions\n\n- **`x-profile` (optional on an operation, boolean)** — marks a profile\n (current-user) operation. `ProfileRoutes` renders the matching component\n from `SpecConfiguration.profileComponents` by mode: GET → view,\n PUT/PATCH → edit, POST → create.\n\n## securityScheme extensions (auth-server wiring)\n\nCarried on the `bearerAuth` scheme and extracted into `AuthConfig`; the\nbackend may template values from environment (e.g. `\"{AUTH_SERVER}\"`) and\nresolve them before serving the spec. Pair with `@aetoskia/react-auth`.\n\n- **`x-server-url`** — auth-server base URL (`AuthConfig.serverUrl`).\n- **`x-login-path`** — login endpoint path.\n- **`x-register-path`** — registration endpoint path.\n- **`x-logout-path`** — logout endpoint path.\n- **`x-me-path`** — current-user endpoint path (react-auth fetches the\n session user from it whenever the token changes).\n- **`x-introspect-path`** — token-introspection endpoint path.\n\n## Path conventions\n\nFor every schema with `x-resource: ` the spec MUST provide:\n`GET /` (list — populates the datatable), `POST /` (create),\n`GET //{id}` (detail), `PUT` or `PATCH //{id}` (edit — PATCH is\nhonored when present), and `DELETE //{id}` (delete).\n\n## Response conventions (strict — no fallbacks)\n\n- **Paginated list** (collection GET has BOTH `limit` and `offset` query\n params): body MUST be `{ total?, items: [] }`. `total` is optional\n (falls back to `items.length`); `items` is required and must be an\n array; anything else throws.\n- **Non-paginated list**: body MUST be a bare JSON array.\n- **Single item / create / update**: the resource object directly.\n- **Delete**: HTTP 204, no body.\n- **Errors**: FastAPI 422 arrays of `{ loc, msg, type }` (each `msg`\n rendered) or generic `{ detail: string }`.\n\n## Pagination conventions\n\nA resource is paginated iff its collection GET has both `limit` and\n`offset`, and `limit` MUST declare `schema.default` (e.g. 20). The\ndatatable then sends `?limit={rowsPerPage}&offset={page * rowsPerPage}`.\nFK option loading requests `?limit=0` on paginated targets — a server\nconvention meaning \"return all records\" (implement it, e.g. in the list\nhandler's pagination helper).\n\n## Validation rules (spec-validator.ts, in order)\n\n1. `x-primary-key` present. 2. `x-display-format` present.\n3. `x-list-columns` is an array of existing property names. 4. Every\nproperty has `x-label`. 5. Every property has `x-order`. 6. `$ref` without\n`x-fk` → info (read-only inline). 7. `x-fk.resource` matches some schema's\n`x-resource` and that target has `x-display-format` + `x-primary-key`.\n8. The `x-resource` path exists in `paths`. 9. Collection path has GET and\nPOST. 10. Item path has GET, PUT (or PATCH) and DELETE. 11. Paginated\ncollections declare `schema.default` on `limit`. Errors block rendering of\nthe affected resource; warnings/infos render alongside.\n\n## Index\n\nThe array value of this export is the machine-readable index (name, level,\nrequired, value shape, example) of the extensions documented above." + }, "Admin": { "name": "Admin", "kind": "component", diff --git a/vet/lib/.nojekyll b/vet/lib/.nojekyll new file mode 100644 index 0000000..e2ac661 --- /dev/null +++ b/vet/lib/.nojekyll @@ -0,0 +1 @@ +TypeDoc added this file to prevent GitHub Pages from using Jekyll. You can turn off this behavior by setting the `githubPages` option to false. \ No newline at end of file diff --git a/vet/lib/assets/hierarchy.js b/vet/lib/assets/hierarchy.js new file mode 100644 index 0000000..88636f0 --- /dev/null +++ b/vet/lib/assets/hierarchy.js @@ -0,0 +1 @@ +window.hierarchyData = "eJyrVirKzy8pVrKKjtVRKkpNy0lNLsnMzwMKVNfWAgCbHgqm" \ No newline at end of file diff --git a/vet/lib/assets/highlight.css b/vet/lib/assets/highlight.css new file mode 100644 index 0000000..b4202ee --- /dev/null +++ b/vet/lib/assets/highlight.css @@ -0,0 +1,92 @@ +:root { + --light-hl-0: #800000; + --dark-hl-0: #808080; + --light-hl-1: #267F99; + --dark-hl-1: #4EC9B0; + --light-hl-2: #000000; + --dark-hl-2: #D4D4D4; + --light-hl-3: #E50000; + --dark-hl-3: #9CDCFE; + --light-hl-4: #A31515; + --dark-hl-4: #CE9178; + --light-hl-5: #0000FF; + --dark-hl-5: #569CD6; + --light-hl-6: #0070C1; + --dark-hl-6: #4FC1FF; + --light-hl-7: #795E26; + --dark-hl-7: #DCDCAA; + --light-hl-8: #001080; + --dark-hl-8: #9CDCFE; + --light-hl-9: #008000; + --dark-hl-9: #6A9955; + --light-code-background: #FFFFFF; + --dark-code-background: #1E1E1E; +} + +@media (prefers-color-scheme: light) { :root { + --hl-0: var(--light-hl-0); + --hl-1: var(--light-hl-1); + --hl-2: var(--light-hl-2); + --hl-3: var(--light-hl-3); + --hl-4: var(--light-hl-4); + --hl-5: var(--light-hl-5); + --hl-6: var(--light-hl-6); + --hl-7: var(--light-hl-7); + --hl-8: var(--light-hl-8); + --hl-9: var(--light-hl-9); + --code-background: var(--light-code-background); +} } + +@media (prefers-color-scheme: dark) { :root { + --hl-0: var(--dark-hl-0); + --hl-1: var(--dark-hl-1); + --hl-2: var(--dark-hl-2); + --hl-3: var(--dark-hl-3); + --hl-4: var(--dark-hl-4); + --hl-5: var(--dark-hl-5); + --hl-6: var(--dark-hl-6); + --hl-7: var(--dark-hl-7); + --hl-8: var(--dark-hl-8); + --hl-9: var(--dark-hl-9); + --code-background: var(--dark-code-background); +} } + +:root[data-theme='light'] { + --hl-0: var(--light-hl-0); + --hl-1: var(--light-hl-1); + --hl-2: var(--light-hl-2); + --hl-3: var(--light-hl-3); + --hl-4: var(--light-hl-4); + --hl-5: var(--light-hl-5); + --hl-6: var(--light-hl-6); + --hl-7: var(--light-hl-7); + --hl-8: var(--light-hl-8); + --hl-9: var(--light-hl-9); + --code-background: var(--light-code-background); +} + +:root[data-theme='dark'] { + --hl-0: var(--dark-hl-0); + --hl-1: var(--dark-hl-1); + --hl-2: var(--dark-hl-2); + --hl-3: var(--dark-hl-3); + --hl-4: var(--dark-hl-4); + --hl-5: var(--dark-hl-5); + --hl-6: var(--dark-hl-6); + --hl-7: var(--dark-hl-7); + --hl-8: var(--dark-hl-8); + --hl-9: var(--dark-hl-9); + --code-background: var(--dark-code-background); +} + +.hl-0 { color: var(--hl-0); } +.hl-1 { color: var(--hl-1); } +.hl-2 { color: var(--hl-2); } +.hl-3 { color: var(--hl-3); } +.hl-4 { color: var(--hl-4); } +.hl-5 { color: var(--hl-5); } +.hl-6 { color: var(--hl-6); } +.hl-7 { color: var(--hl-7); } +.hl-8 { color: var(--hl-8); } +.hl-9 { color: var(--hl-9); } +pre, code { background: var(--code-background); } diff --git a/vet/lib/assets/icons.js b/vet/lib/assets/icons.js new file mode 100644 index 0000000..58882d7 --- /dev/null +++ b/vet/lib/assets/icons.js @@ -0,0 +1,18 @@ +(function() { + addIcons(); + function addIcons() { + if (document.readyState === "loading") return document.addEventListener("DOMContentLoaded", addIcons); + const svg = document.body.appendChild(document.createElementNS("http://www.w3.org/2000/svg", "svg")); + svg.innerHTML = `MMNEPVFCICPMFPCPTTAAATR`; + svg.style.display = "none"; + if (location.protocol === "file:") updateUseElements(); + } + + function updateUseElements() { + document.querySelectorAll("use").forEach(el => { + if (el.getAttribute("href").includes("#icon-")) { + el.setAttribute("href", el.getAttribute("href").replace(/.*#/, "#")); + } + }); + } +})() \ No newline at end of file diff --git a/vet/lib/assets/icons.svg b/vet/lib/assets/icons.svg new file mode 100644 index 0000000..50ad579 --- /dev/null +++ b/vet/lib/assets/icons.svg @@ -0,0 +1 @@ +MMNEPVFCICPMFPCPTTAAATR \ No newline at end of file diff --git a/vet/lib/assets/main.js b/vet/lib/assets/main.js new file mode 100644 index 0000000..2363f64 --- /dev/null +++ b/vet/lib/assets/main.js @@ -0,0 +1,60 @@ +"use strict"; +window.translations={"copy":"Copy","copied":"Copied!","normally_hidden":"This member is normally hidden due to your filter settings.","hierarchy_expand":"Expand","hierarchy_collapse":"Collapse","folder":"Folder","kind_1":"Project","kind_2":"Module","kind_4":"Namespace","kind_8":"Enumeration","kind_16":"Enumeration Member","kind_32":"Variable","kind_64":"Function","kind_128":"Class","kind_256":"Interface","kind_512":"Constructor","kind_1024":"Property","kind_2048":"Method","kind_4096":"Call Signature","kind_8192":"Index Signature","kind_16384":"Constructor Signature","kind_32768":"Parameter","kind_65536":"Type Literal","kind_131072":"Type Parameter","kind_262144":"Accessor","kind_524288":"Get Signature","kind_1048576":"Set Signature","kind_2097152":"Type Alias","kind_4194304":"Reference","kind_8388608":"Document"}; +"use strict";(()=>{var De=Object.create;var le=Object.defineProperty;var Fe=Object.getOwnPropertyDescriptor;var Ne=Object.getOwnPropertyNames;var Ve=Object.getPrototypeOf,Be=Object.prototype.hasOwnProperty;var qe=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var je=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Ne(e))!Be.call(t,i)&&i!==n&&le(t,i,{get:()=>e[i],enumerable:!(r=Fe(e,i))||r.enumerable});return t};var $e=(t,e,n)=>(n=t!=null?De(Ve(t)):{},je(e||!t||!t.__esModule?le(n,"default",{value:t,enumerable:!0}):n,t));var pe=qe((de,he)=>{(function(){var t=function(e){var n=new t.Builder;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),n.searchPipeline.add(t.stemmer),e.call(n,n),n.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(n){e.console&&console.warn&&console.warn(n)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var n=Object.create(null),r=Object.keys(e),i=0;i0){var d=t.utils.clone(n)||{};d.position=[a,c],d.index=s.length,s.push(new t.Token(r.slice(a,o),d))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. +`,e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(r){var i=t.Pipeline.registeredFunctions[r];if(i)n.add(i);else throw new Error("Cannot load unregistered function: "+r)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(n){t.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");r=r+1,this._stack.splice(r,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");this._stack.splice(r,0,n)},t.Pipeline.prototype.remove=function(e){var n=this._stack.indexOf(e);n!=-1&&this._stack.splice(n,1)},t.Pipeline.prototype.run=function(e){for(var n=this._stack.length,r=0;r1&&(oe&&(r=s),o!=e);)i=r-n,s=n+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ol?d+=2:a==l&&(n+=r[c+1]*i[d+1],c+=2,d+=2);return n},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),n=1,r=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}if(s.str.length==0&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var c=s.node.edges["*"];else{var c=new t.TokenSet;s.node.edges["*"]=c}s.str.length==1&&(c.final=!0),i.push({node:c,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var d=s.str.charAt(0),m=s.str.charAt(1),p;m in s.node.edges?p=s.node.edges[m]:(p=new t.TokenSet,s.node.edges[m]=p),s.str.length==1&&(p.final=!0),i.push({node:p,editsRemaining:s.editsRemaining-1,str:d+s.str.slice(2)})}}}return r},t.TokenSet.fromString=function(e){for(var n=new t.TokenSet,r=n,i=0,s=e.length;i=e;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(n){var r=new t.QueryParser(e,n);r.parse()})},t.Index.prototype.query=function(e){for(var n=new t.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),l=0;l1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,n){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,n;do e=this.next(),n=e.charCodeAt(0);while(n>47&&n<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var n=e.next();if(n==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){e.escapeCharacter();continue}if(n==":")return t.QueryLexer.lexField;if(n=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(n=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(n=="+"&&e.width()===1||n=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(n.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,n){this.lexer=new t.QueryLexer(e),this.query=n,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var n=e.peekLexeme();if(n!=null)switch(n.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(r+=" with value '"+n.str+"'"),new t.QueryParseError(r,n.start,n.end)}},t.QueryParser.parsePresence=function(e){var n=e.consumeLexeme();if(n!=null){switch(n.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+n.str+"'";throw new t.QueryParseError(r,n.start,n.end)}var i=e.peekLexeme();if(i==null){var r="expecting term or field, found nothing";throw new t.QueryParseError(r,n.start,n.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(r,i.start,i.end)}}},t.QueryParser.parseField=function(e){var n=e.consumeLexeme();if(n!=null){if(e.query.allFields.indexOf(n.str)==-1){var r=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+n.str+"', possible fields: "+r;throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.fields=[n.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,n.start,n.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var n=e.consumeLexeme();if(n!=null){e.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(r==null){e.nextClause();return}switch(r.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new t.QueryParseError(i,r.start,r.end)}}},t.QueryParser.parseEditDistance=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.editDistance=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="boost must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.boost=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,n){typeof define=="function"&&define.amd?define(n):typeof de=="object"?he.exports=n():e.lunr=n()}(this,function(){return t})})()});window.translations||={copy:"Copy",copied:"Copied!",normally_hidden:"This member is normally hidden due to your filter settings.",hierarchy_expand:"Expand",hierarchy_collapse:"Collapse",folder:"Folder",kind_1:"Project",kind_2:"Module",kind_4:"Namespace",kind_8:"Enumeration",kind_16:"Enumeration Member",kind_32:"Variable",kind_64:"Function",kind_128:"Class",kind_256:"Interface",kind_512:"Constructor",kind_1024:"Property",kind_2048:"Method",kind_4096:"Call Signature",kind_8192:"Index Signature",kind_16384:"Constructor Signature",kind_32768:"Parameter",kind_65536:"Type Literal",kind_131072:"Type Parameter",kind_262144:"Accessor",kind_524288:"Get Signature",kind_1048576:"Set Signature",kind_2097152:"Type Alias",kind_4194304:"Reference",kind_8388608:"Document"};var ce=[];function G(t,e){ce.push({selector:e,constructor:t})}var J=class{alwaysVisibleMember=null;constructor(){this.createComponents(document.body),this.ensureFocusedElementVisible(),this.listenForCodeCopies(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible()),document.body.style.display||(this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}createComponents(e){ce.forEach(n=>{e.querySelectorAll(n.selector).forEach(r=>{r.dataset.hasInstance||(new n.constructor({el:r,app:this}),r.dataset.hasInstance=String(!0))})})}filterChanged(){this.ensureFocusedElementVisible()}showPage(){document.body.style.display&&(document.body.style.removeProperty("display"),this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}scrollToHash(){if(location.hash){let e=document.getElementById(location.hash.substring(1));if(!e)return;e.scrollIntoView({behavior:"instant",block:"start"})}}ensureActivePageVisible(){let e=document.querySelector(".tsd-navigation .current"),n=e?.parentElement;for(;n&&!n.classList.contains(".tsd-navigation");)n instanceof HTMLDetailsElement&&(n.open=!0),n=n.parentElement;if(e&&!ze(e)){let r=e.getBoundingClientRect().top-document.documentElement.clientHeight/4;document.querySelector(".site-menu").scrollTop=r,document.querySelector(".col-sidebar").scrollTop=r}}updateIndexVisibility(){let e=document.querySelector(".tsd-index-content"),n=e?.open;e&&(e.open=!0),document.querySelectorAll(".tsd-index-section").forEach(r=>{r.style.display="block";let i=Array.from(r.querySelectorAll(".tsd-index-link")).every(s=>s.offsetParent==null);r.style.display=i?"none":"block"}),e&&(e.open=n)}ensureFocusedElementVisible(){if(this.alwaysVisibleMember&&(this.alwaysVisibleMember.classList.remove("always-visible"),this.alwaysVisibleMember.firstElementChild.remove(),this.alwaysVisibleMember=null),!location.hash)return;let e=document.getElementById(location.hash.substring(1));if(!e)return;let n=e.parentElement;for(;n&&n.tagName!=="SECTION";)n=n.parentElement;if(!n)return;let r=n.offsetParent==null,i=n;for(;i!==document.body;)i instanceof HTMLDetailsElement&&(i.open=!0),i=i.parentElement;if(n.offsetParent==null){this.alwaysVisibleMember=n,n.classList.add("always-visible");let s=document.createElement("p");s.classList.add("warning"),s.textContent=window.translations.normally_hidden,n.prepend(s)}r&&e.scrollIntoView()}listenForCodeCopies(){document.querySelectorAll("pre > button").forEach(e=>{let n;e.addEventListener("click",()=>{e.previousElementSibling instanceof HTMLElement&&navigator.clipboard.writeText(e.previousElementSibling.innerText.trim()),e.textContent=window.translations.copied,e.classList.add("visible"),clearTimeout(n),n=setTimeout(()=>{e.classList.remove("visible"),n=setTimeout(()=>{e.textContent=window.translations.copy},100)},1e3)})})}};function ze(t){let e=t.getBoundingClientRect(),n=Math.max(document.documentElement.clientHeight,window.innerHeight);return!(e.bottom<0||e.top-n>=0)}var ue=(t,e=100)=>{let n;return()=>{clearTimeout(n),n=setTimeout(()=>t(),e)}};var ge=$e(pe(),1);async function A(t){let e=Uint8Array.from(atob(t),s=>s.charCodeAt(0)),r=new Blob([e]).stream().pipeThrough(new DecompressionStream("deflate")),i=await new Response(r).text();return JSON.parse(i)}async function fe(t,e){if(!window.searchData)return;let n=await A(window.searchData);t.data=n,t.index=ge.Index.load(n.index),e.classList.remove("loading"),e.classList.add("ready")}function ve(){let t=document.getElementById("tsd-search");if(!t)return;let e={base:document.documentElement.dataset.base+"/"},n=document.getElementById("tsd-search-script");t.classList.add("loading"),n&&(n.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),n.addEventListener("load",()=>{fe(e,t)}),fe(e,t));let r=document.querySelector("#tsd-search input"),i=document.querySelector("#tsd-search .results");if(!r||!i)throw new Error("The input field or the result list wrapper was not found");i.addEventListener("mouseup",()=>{re(t)}),r.addEventListener("focus",()=>t.classList.add("has-focus")),We(t,i,r,e)}function We(t,e,n,r){n.addEventListener("input",ue(()=>{Ue(t,e,n,r)},200)),n.addEventListener("keydown",i=>{i.key=="Enter"?Je(e,t):i.key=="ArrowUp"?(me(e,n,-1),i.preventDefault()):i.key==="ArrowDown"&&(me(e,n,1),i.preventDefault())}),document.body.addEventListener("keypress",i=>{i.altKey||i.ctrlKey||i.metaKey||!n.matches(":focus")&&i.key==="/"&&(i.preventDefault(),n.focus())}),document.body.addEventListener("keyup",i=>{t.classList.contains("has-focus")&&(i.key==="Escape"||!e.matches(":focus-within")&&!n.matches(":focus"))&&(n.blur(),re(t))})}function re(t){t.classList.remove("has-focus")}function Ue(t,e,n,r){if(!r.index||!r.data)return;e.textContent="";let i=n.value.trim(),s;if(i){let o=i.split(" ").map(a=>a.length?`*${a}*`:"").join(" ");s=r.index.search(o)}else s=[];for(let o=0;oa.score-o.score);for(let o=0,a=Math.min(10,s.length);o`,d=ye(l.name,i);globalThis.DEBUG_SEARCH_WEIGHTS&&(d+=` (score: ${s[o].score.toFixed(2)})`),l.parent&&(d=` + ${ye(l.parent,i)}.${d}`);let m=document.createElement("li");m.classList.value=l.classes??"";let p=document.createElement("a");p.href=r.base+l.url,p.innerHTML=c+d,m.append(p),p.addEventListener("focus",()=>{e.querySelector(".current")?.classList.remove("current"),m.classList.add("current")}),e.appendChild(m)}}function me(t,e,n){let r=t.querySelector(".current");if(!r)r=t.querySelector(n==1?"li:first-child":"li:last-child"),r&&r.classList.add("current");else{let i=r;if(n===1)do i=i.nextElementSibling??void 0;while(i instanceof HTMLElement&&i.offsetParent==null);else do i=i.previousElementSibling??void 0;while(i instanceof HTMLElement&&i.offsetParent==null);i?(r.classList.remove("current"),i.classList.add("current")):n===-1&&(r.classList.remove("current"),e.focus())}}function Je(t,e){let n=t.querySelector(".current");if(n||(n=t.querySelector("li:first-child")),n){let r=n.querySelector("a");r&&(window.location.href=r.href),re(e)}}function ye(t,e){if(e==="")return t;let n=t.toLocaleLowerCase(),r=e.toLocaleLowerCase(),i=[],s=0,o=n.indexOf(r);for(;o!=-1;)i.push(ne(t.substring(s,o)),`${ne(t.substring(o,o+r.length))}`),s=o+r.length,o=n.indexOf(r,s);return i.push(ne(t.substring(s))),i.join("")}var Ge={"&":"&","<":"<",">":">","'":"'",'"':"""};function ne(t){return t.replace(/[&<>"'"]/g,e=>Ge[e])}var I=class{el;app;constructor(e){this.el=e.el,this.app=e.app}};var H="mousedown",Ee="mousemove",B="mouseup",X={x:0,y:0},xe=!1,ie=!1,Xe=!1,D=!1,be=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(be?"is-mobile":"not-mobile");be&&"ontouchstart"in document.documentElement&&(Xe=!0,H="touchstart",Ee="touchmove",B="touchend");document.addEventListener(H,t=>{ie=!0,D=!1;let e=H=="touchstart"?t.targetTouches[0]:t;X.y=e.pageY||0,X.x=e.pageX||0});document.addEventListener(Ee,t=>{if(ie&&!D){let e=H=="touchstart"?t.targetTouches[0]:t,n=X.x-(e.pageX||0),r=X.y-(e.pageY||0);D=Math.sqrt(n*n+r*r)>10}});document.addEventListener(B,()=>{ie=!1});document.addEventListener("click",t=>{xe&&(t.preventDefault(),t.stopImmediatePropagation(),xe=!1)});var Y=class extends I{active;className;constructor(e){super(e),this.className=this.el.dataset.toggle||"",this.el.addEventListener(B,n=>this.onPointerUp(n)),this.el.addEventListener("click",n=>n.preventDefault()),document.addEventListener(H,n=>this.onDocumentPointerDown(n)),document.addEventListener(B,n=>this.onDocumentPointerUp(n))}setActive(e){if(this.active==e)return;this.active=e,document.documentElement.classList.toggle("has-"+this.className,e),this.el.classList.toggle("active",e);let n=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(n),setTimeout(()=>document.documentElement.classList.remove(n),500)}onPointerUp(e){D||(this.setActive(!0),e.preventDefault())}onDocumentPointerDown(e){if(this.active){if(e.target.closest(".col-sidebar, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(e){if(!D&&this.active&&e.target.closest(".col-sidebar")){let n=e.target.closest("a");if(n){let r=window.location.href;r.indexOf("#")!=-1&&(r=r.substring(0,r.indexOf("#"))),n.href.substring(0,r.length)==r&&setTimeout(()=>this.setActive(!1),250)}}}};var se;try{se=localStorage}catch{se={getItem(){return null},setItem(){}}}var C=se;var Le=document.head.appendChild(document.createElement("style"));Le.dataset.for="filters";var Z=class extends I{key;value;constructor(e){super(e),this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),Le.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } +`,this.app.updateIndexVisibility()}fromLocalStorage(){let e=C.getItem(this.key);return e?e==="true":this.el.checked}setLocalStorage(e){C.setItem(this.key,e.toString()),this.value=e,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),this.app.filterChanged(),this.app.updateIndexVisibility()}};var oe=new Map,ae=class{open;accordions=[];key;constructor(e,n){this.key=e,this.open=n}add(e){this.accordions.push(e),e.open=this.open,e.addEventListener("toggle",()=>{this.toggle(e.open)})}toggle(e){for(let n of this.accordions)n.open=e;C.setItem(this.key,e.toString())}},K=class extends I{constructor(e){super(e);let n=this.el.querySelector("summary"),r=n.querySelector("a");r&&r.addEventListener("click",()=>{location.assign(r.href)});let i=`tsd-accordion-${n.dataset.key??n.textContent.trim().replace(/\s+/g,"-").toLowerCase()}`,s;if(oe.has(i))s=oe.get(i);else{let o=C.getItem(i),a=o?o==="true":this.el.open;s=new ae(i,a),oe.set(i,s)}s.add(this.el)}};function Se(t){let e=C.getItem("tsd-theme")||"os";t.value=e,we(e),t.addEventListener("change",()=>{C.setItem("tsd-theme",t.value),we(t.value)})}function we(t){document.documentElement.dataset.theme=t}var ee;function Ce(){let t=document.getElementById("tsd-nav-script");t&&(t.addEventListener("load",Te),Te())}async function Te(){let t=document.getElementById("tsd-nav-container");if(!t||!window.navigationData)return;let e=await A(window.navigationData);ee=document.documentElement.dataset.base,ee.endsWith("/")||(ee+="/"),t.innerHTML="";for(let n of e)Ie(n,t,[]);window.app.createComponents(t),window.app.showPage(),window.app.ensureActivePageVisible()}function Ie(t,e,n){let r=e.appendChild(document.createElement("li"));if(t.children){let i=[...n,t.text],s=r.appendChild(document.createElement("details"));s.className=t.class?`${t.class} tsd-accordion`:"tsd-accordion";let o=s.appendChild(document.createElement("summary"));o.className="tsd-accordion-summary",o.dataset.key=i.join("$"),o.innerHTML='',ke(t,o);let a=s.appendChild(document.createElement("div"));a.className="tsd-accordion-details";let l=a.appendChild(document.createElement("ul"));l.className="tsd-nested-navigation";for(let c of t.children)Ie(c,l,i)}else ke(t,r,t.class)}function ke(t,e,n){if(t.path){let r=e.appendChild(document.createElement("a"));if(r.href=ee+t.path,n&&(r.className=n),location.pathname===r.pathname&&!r.href.includes("#")&&r.classList.add("current"),t.kind){let i=window.translations[`kind_${t.kind}`].replaceAll('"',""");r.innerHTML=``}r.appendChild(document.createElement("span")).textContent=t.text}else{let r=e.appendChild(document.createElement("span")),i=window.translations.folder.replaceAll('"',""");r.innerHTML=``,r.appendChild(document.createElement("span")).textContent=t.text}}var te=document.documentElement.dataset.base;te.endsWith("/")||(te+="/");function Pe(){document.querySelector(".tsd-full-hierarchy")?Ye():document.querySelector(".tsd-hierarchy")&&Ze()}function Ye(){document.addEventListener("click",r=>{let i=r.target;for(;i.parentElement&&i.parentElement.tagName!="LI";)i=i.parentElement;i.dataset.dropdown&&(i.dataset.dropdown=String(i.dataset.dropdown!=="true"))});let t=new Map,e=new Set;for(let r of document.querySelectorAll(".tsd-full-hierarchy [data-refl]")){let i=r.querySelector("ul");t.has(r.dataset.refl)?e.add(r.dataset.refl):i&&t.set(r.dataset.refl,i)}for(let r of e)n(r);function n(r){let i=t.get(r).cloneNode(!0);i.querySelectorAll("[id]").forEach(s=>{s.removeAttribute("id")}),i.querySelectorAll("[data-dropdown]").forEach(s=>{s.dataset.dropdown="false"});for(let s of document.querySelectorAll(`[data-refl="${r}"]`)){let o=tt(),a=s.querySelector("ul");s.insertBefore(o,a),o.dataset.dropdown=String(!!a),a||s.appendChild(i.cloneNode(!0))}}}function Ze(){let t=document.getElementById("tsd-hierarchy-script");t&&(t.addEventListener("load",Qe),Qe())}async function Qe(){let t=document.querySelector(".tsd-panel.tsd-hierarchy:has(h4 a)");if(!t||!window.hierarchyData)return;let e=+t.dataset.refl,n=await A(window.hierarchyData),r=t.querySelector("ul"),i=document.createElement("ul");if(i.classList.add("tsd-hierarchy"),Ke(i,n,e),r.querySelectorAll("li").length==i.querySelectorAll("li").length)return;let s=document.createElement("span");s.classList.add("tsd-hierarchy-toggle"),s.textContent=window.translations.hierarchy_expand,t.querySelector("h4 a")?.insertAdjacentElement("afterend",s),s.insertAdjacentText("beforebegin",", "),s.addEventListener("click",()=>{s.textContent===window.translations.hierarchy_expand?(r.insertAdjacentElement("afterend",i),r.remove(),s.textContent=window.translations.hierarchy_collapse):(i.insertAdjacentElement("afterend",r),i.remove(),s.textContent=window.translations.hierarchy_expand)})}function Ke(t,e,n){let r=e.roots.filter(i=>et(e,i,n));for(let i of r)t.appendChild(_e(e,i,n))}function _e(t,e,n,r=new Set){if(r.has(e))return;r.add(e);let i=t.reflections[e],s=document.createElement("li");if(s.classList.add("tsd-hierarchy-item"),e===n){let o=s.appendChild(document.createElement("span"));o.textContent=i.name,o.classList.add("tsd-hierarchy-target")}else{for(let a of i.uniqueNameParents||[]){let l=t.reflections[a],c=s.appendChild(document.createElement("a"));c.textContent=l.name,c.href=te+l.url,c.className=l.class+" tsd-signature-type",s.append(document.createTextNode("."))}let o=s.appendChild(document.createElement("a"));o.textContent=t.reflections[e].name,o.href=te+i.url,o.className=i.class+" tsd-signature-type"}if(i.children){let o=s.appendChild(document.createElement("ul"));o.classList.add("tsd-hierarchy");for(let a of i.children){let l=_e(t,a,n,r);l&&o.appendChild(l)}}return r.delete(e),s}function et(t,e,n){if(e===n)return!0;let r=new Set,i=[t.reflections[e]];for(;i.length;){let s=i.pop();if(!r.has(s)){r.add(s);for(let o of s.children||[]){if(o===n)return!0;i.push(t.reflections[o])}}}return!1}function tt(){let t=document.createElementNS("http://www.w3.org/2000/svg","svg");return t.setAttribute("width","20"),t.setAttribute("height","20"),t.setAttribute("viewBox","0 0 24 24"),t.setAttribute("fill","none"),t.innerHTML='',t}G(Y,"a[data-toggle]");G(K,".tsd-accordion");G(Z,".tsd-filter-item input[type=checkbox]");var Oe=document.getElementById("tsd-theme");Oe&&Se(Oe);var nt=new J;Object.defineProperty(window,"app",{value:nt});ve();Ce();Pe();})(); +/*! Bundled license information: + +lunr/lunr.js: + (** + * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 + * Copyright (C) 2020 Oliver Nightingale + * @license MIT + *) + (*! + * lunr.utils + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Set + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.tokenizer + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Pipeline + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Vector + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.stemmer + * Copyright (C) 2020 Oliver Nightingale + * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt + *) + (*! + * lunr.stopWordFilter + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.trimmer + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.TokenSet + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Index + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Builder + * Copyright (C) 2020 Oliver Nightingale + *) +*/ diff --git a/vet/lib/assets/navigation.js b/vet/lib/assets/navigation.js new file mode 100644 index 0000000..dcfab1e --- /dev/null +++ b/vet/lib/assets/navigation.js @@ -0,0 +1 @@ +window.navigationData = "eJytlk1v2zAMhv+Lz8k+urXDchvSDtuhwID2VhSBItO2EFsSZDlbN/S/T/6ILTuSwjg9JuT7kK+oUHn6F2n4o6NVVCoaLSKasTxWwKPVUx/5LoQGZYKS6Mx8LkRc5VC+N4pNG3uX6SI3CTvG42h15cbEkJAq1wMnqTjVTPARqcsaE28+vz6/LnrSDyCxr6E29hYNdSRUQ6IATzsm8ibN1BxMKwVh3N1KHZm0YumEBE4kW1LBE5a6CeMclK1SAl036ZUitZ2BvCeKka2HfaQbV/t0NTJdZkRBvNQZNHNwNfJNyscu7HBmAzaHVJTBtciFuhexBdYvMojtJZMCH75++Xhtz6RPNCfRfOU5uxNlOvXRCS6wl8/Nx9xGWpVaFOxvM8LSM5qYaHLLSpmTF8R0xsiNJcb9zob89bS504cbKO4FB29uAhBvCd2db/ygRLk+JF9uuS/rRgbNMi4rXZ5vtdWhjLapl9vsSrpwQYuc7Fk6WXRYm4MWZXVIv9yuVdqHDS/gSiWEwozZHpS416RLvtxwX9aNdJi17TbIdeClHJW2slEuH6AgXDPaLHDLHTNrvG02XGOsn5S8vrF8jDJRj5i3DuY9S0H7vAUeHLvkESH4+jTKX4oVTLM96nJOFKhxbRUxUcwdnNIbZeBZprXFB1qrcJd8WsAGBOqkyn55z+DXwiAXwPuH7wTYKANkYU4uhVnoVhpgG+kssIkEqEYai9/zxthpw3Q57zgaZYBs9oAwY5bZvBsyyEP3BPQtlCzlj2IH/IytYN+YMcOxF+zNsGcalsD37pVwiKJ+/j8LKZS+B028m7rnDbmhrTxk3dkdnobeHbVsuLXx5/9Q6bPL" \ No newline at end of file diff --git a/vet/lib/assets/search.js b/vet/lib/assets/search.js new file mode 100644 index 0000000..150c60f --- /dev/null +++ b/vet/lib/assets/search.js @@ -0,0 +1 @@ +window.searchData = "eJzNndtu28YWht9FuVUdcs6TuzZN0QC7QNGmvTECg5ZoW4gtCZLs3e4g77455Ehcaw7iiAcjN7Fjav3zc/GbWcMhKX6d7Tb/3c/eXX+dfVmtl7N3ZD5bF0/l7N1sv1u8/WWzOZS72Xz2vHus/vS0WT4/lvu31aabZtPVw+Hpsdq+eCz2+7ISms2+zY9agp3EluVd8fx4OCndPa8Xh9VmjbTshwKa89m22JXrA7bVtoRd/1oWy4jrZtM4rq1WsmtrK+p6U/0a9FxtGMmxUUr3awzF3D4Vq3XQrdlw1i3W2WzLdbFd/bDYrO9W90FF/JGz2hSIb8vF+zrieVeYFJy0X4rdqriNqHth3XlydiG2p/uHKmj5w+GhfCrf/rjdfjK/BHcYfvLm+MnzOc20zHnb3vvN42b322bZ6h/+3Z5VP0V07294R4IH4aRapfRQ/nOIHIMOSzZ4uLPkjhI2lNxzunycAWPxvD9snlb/Kxozy+JQ/Lzabx+Lf7tRwbE3IDa104CQ90gs5cCdaT6qe2Euz2SnT3bvynJ5Wyy+XJzaY2BqXo+fH5zUU8NhxWHpPKWjTy5X6+3zYX9xJpuw1Dw2nx6cRdtoSG1YBm0S+uRvXbys7nGhSs1hG5qaxzZicC5B4zHVYTkFiemT1/3z7q5YlJeTeQxMnnDYzw/O6KnhsOKwbJ7SkZTL+t/38akZ2g3w4dTp6n15+LN8KtaH1aKu9vuUegzb8QQuzA7cwfh0CjWRMq2CFr3gcSxyEbbXpnBVzZqag32BwXESmGeEuR1jDF9vWq3L/TmCMbu3mx08exzi9iQ1mVk0qR5i1QqNabRrXPl9t3paHVYvKWOzE5A6Jt/uiuovCUOwq18H9ukKYKcih4xnwwy9ubkxo04t08+ZFWt0YjbzbByfjc6ERslIRsnURulIRunURtlIRtnURvlIRvnURsVIRsXURuVIRuXURtVIRtXURvVIRvUERkGlvN+BFaYLfJq476lOnvyMUCZrrUmqpOtyUJFMsNmzRro2B5XIBJs9K6Rrc1CBTLDZsz66NgeVxwSbPauj34OmtdmzNro2B5XGBJs9K6Nrc1BhTLE5zrApJx43e5Zv1+ag6p1ic5xsqomz2XOO4docNMUI20QzjLKMXYTtsFkFfl9zjKOhUSYZRmyiWYbjc+A0o9to73mGY3TgRKPbaO+ZhmN04FSj22jvuYZjdOBko9to79mG15cmNtp7vuEYHTjh6Dbae8bhGB045eg22ruYO0YHVvNuo73rpGN0YKEMGgWVclOdrd+XfZw2kd9TrQSORiiWVm2Sauk7HVQuk6z2rJe+1UEFM8lqz4rpWx1UMpOs9qyZvtVBRTPJas+qGepVU1vtWTd9q4MKZ5LVnpXTtzqodCZZ7Vk7fauDimeS1Z7V07c6qHzGrIL6WQX3MVpt+Z4q59HOCGXTSE1SMx2Pgwpmt8me1dIxOahUdpvsWScdk4OKZLfJnhXSMTmoPHab7FkbvX4zqcmeVdExOagkdpvsWQ8dk4OKYbfJnpXQMTmoDHab7FkDHZODCmDQJL6n8udyv7pff9p8Kdfpd1TCU1QsMVpVBDV6Ye4W+3NhPpp0j6xrEcZPU7UfV/cPSQ+sdFqzR/0o2PO4I9nzlC6L3ZcxnVu9SYwDJqotm/tdsX3odSdCGz0ND3eb9eGX4mn1OIY7m1ijeXfU7JleoHyeiod8POO11uSGyYiGyWsYpiMapq9hmI1omL2GYT6iYf4ahsWIhsUrGN4/3x5Wh8dyxMECSr6W/RGHDig5tf3bzfLfETN/lHsN2yNm/Cg3te1FsT3zZHgP463gBNbhs2YPxbbXBaI6cJr5UfOwyx/FcvXca0bfWjtRYAR3R8GeGW1kO5K5NF+C0c+zCR0tofiRmZfVofyhXL+cnMHHY44bz38vAHhK7OPTdrM7/FYeipOe88DQSbL9aPeenUxGsID+E9t708R0twkCO3f6w0U+PgQTe+Gu//3x04ebH3//ePPTj39+uPnrj//0MPDGbLsptqub22Jf3pjwCzPzocvgX59+HcHh8+FhmMXP86rRZfnP7N3X2Uu525tx9N2MXNErXUncrcrHpfmimsZ71cDm6cmIzmfLzeK5/vWz/djf5eJgHkV7d918+m02m19nc8aulOSfP8+vj8H1hvoPR432L3VgVTuv8zmlVzxnKDD3AnMUWFWvaxJqkXiBBAXSWIvUC6QosJp9X9NQi8wLZCiQx1rkXiBHgdVs9JqFWhReoECBsvofn9Pq0GZ6LuwvSEF6ChIpqOp/MtS08gIVCqxQulbzXF9RzeY61LT2FDRGwhCSB2nKfZxyh6caqDwYHEAKM5WTKI0+VTnGKqdwx3MS2vPcRyzHjOWGnDxIWe5jlmPOco4ssKAFn7kcQ5cblHIetOBzl2PwcoksBNHLffZyDF9ukMqD+OU+fzkGMEcE5ipowWcwxxCSGkIdHGB8CAmGkOTQAslCFohPI3FGuHqIC6JMAoMcxpEgHEkQR+LjSDCOxABGgjgSH0eCcSSGKxIcv4hPIcEUEsMVCVJIfAoJppAYnIgIBvvwEQwfMTiRIHzEh49g+IihiKhgsM8cwczRDB2z4OBJffgoho8aimhw+KQ+cxQzRw1FtBoC8ytGnZZ95qhTWQ081bQ/FBworhg1WpdXGgz2UaMYNWrgoSwY7KNGMWrUwEN5MNhHjWLUqIGHimCwjxrFqFEDD5XBYB81ilGjBh6qgsE+ahSjxgwzVIeCmU8Yw4QxwwzLgsE+YQwTxgwzLDiqMZ8whgljNIon8wljzvyNRfFkgSkcJozxKJ7MJ4xhwpiI4sl8whgmjMkonswnjGHCmIriyXzCGCaM6SiezCeMYcJ4FsWT+4RxTBivCQtO77lPGMeEcRJlm/uEcUwYN8ywYMXjPmEcE8ZZtGNwnzDunCUYZliwXPLAiQImjItox+A+YRwTxmW0Y3CfMI4J4yraMbhPGMeEcR3tGNwnjGPCRBbtGMInTGDCRB7tGMInTGDCBIl2DOETJjBhgkY7hvAJE5gwwaJsC58wgQkTPIqn8AkTzrlofTIanJCJwOkoJkzIKJ7CJ0xgwoSK4il8wgQmTOgonsInTGDCZBbFU/qESUyYzKN4Sp8wiQmTJIqn9AmTmDBJo3hKnzCJCZMsiqf0CZOYMMmjeEqfMIkJkyKKp/QJk86Kh2GGBaf8MrDWgQmTKoqn9AmTmDCpo3hKnzCJCVNZFE/lE6YwYSqP4ql8whQmTJEonsonTGHCFI3iqXzCFCZMsSieyidMYcIUj+KpfMIUJkyJKJ7KJ0xhwpSM4ql8wpSznGaYYeEFtcCKGiZMGWZY8KRS+YQpTJg2zLDgQob2CdOYMG2Y4cFzSe0TpjFh2jDDgzN97ROmMWHaMMODM0DtE6YxYdoww4OTOO0TpjFh2jDDg/Mw7ROmMWHaMMODVVL7hGlMmK6XbYNjmPYJ05gwbZjhQcK0T5h2Fm0NMzxImA4s17rrtQYaHkSs2YbDwd9svOFGRBZ8A4u2mbNqmxl0RHjNNwss3GbOym1m6BFB1pptbryzZpsZgER40TYLrNpmzrJtZhgSQeKabW68s2CbGYxEeMU2CyzZZs6abWZIEkHumm1uvLNamxmYhDxdb1Bzoq54JhylwMpt5izdZoYsESEpsGabOSTWFwOq9qm+4pri+NC1A+/igSFLhkkMXj5wSKyvCcjI1YcAie41hPpqgAyTGLp4YP9WX9h7KXeHcvmxucB3fd08cPJ1dmMv+bWX47/OKK3+/TafMdb8rE7p6p/V3Ln+WU1Sqp/f2kuA9V9PVwHNNuODOC1Q0IJVZty2YJWFbn5WM5mUFqjTAgMtWGUmbAtWWWa2hTypBea0wEELVpkds2OVZW5bIEktcNxADhogtgF7OLhtUNgGpUpsALcgQAtWiR3Tb61L27KiSS0IpwUJWrDKzKZfWGVp90mxpBak04ICLVhlbtMvrLK0iCme1gI+Dgx0B56GinI86laBWW/c7r2w3qSFVIm0FhyPoEPxtCOlscdqutp6tMeeW2/CepOWOiWTWrA3vLVtCEC0Ka2pIgSJECiStq/H7/5tVQgAk6R1HnwLFDDEoaG0w2e/CxcgAtJP0yA73d8GrFBoJa0/1U8EPNXfo90K5RkUukxncXy9CJCDBz5x7+pvMD4+kwI4Bf1dpRWf4+tsQJ5ajTSUm4cuWgEO8qPTdsi8H2PZvB9j4XwrPUgUPIBpx+/08hSgAkSaqGPZaH7kaV2vvvMLJE1BJuxgnifScXydxZldh90orRfBJzbAsQEDhE4bH+7Lw7J+xupgH9MCvIGBQqUNFJXa3n4P98J+CzwYeMARJmlHuPk6UGAJHF+Wdijt930BDTA/4mll8QGN5Rzsh07bjwc0jnPgQCc6oEgAAKPTgDGPRQABMAzotHHAPKYABAAbOo0N89gAEABdSqcNZqv6Rr2n+s5R0Dc17JuXKjkdXcLBP3G4bl62cqZ3g1Tlaamyj+gBZsFO6rRhp31fyRlrQJakyR6/FAh4AzCKNBjrb0YACrAopdGIRhm3hBPQv0ha/zozaoHdI2m7d7qTG1AqIKWJ+9jcXQ9EGBRJ3LFtuVjg988B3MEAn6a2W7y9sy9jbGVAp0mDyMg82LcjgkyDRKfL1K8rBLNJUCCSRZq3CAIgAdHJIvb9e2iQu3Sy1d6jD2XgUGnnHnZWkx+nNfYUNrfbiZ38EPs5mn5czH3RCDrpzX26ddonrUAy0ECdaKh95gk4QjP0tEH69MIWgBvokiTx8Ni3FsVHVAImKCSNYveMgYDDTdLqWfM8R7Hd1r9AMe2gkygVeMHd8vj6P1A+4Plo2nQzKN++/w5ow7EubagLah/fBweU4VCcdtyDyvBNaUAdnioMSHn7vjBABgCfpHEPnvTxzwUJHHEvOX71v9v2ySGoCYhLHHXg8/ZguAA9Saf1pMAzKqDWoRPxSwTxIyVAEeKfwv/n+Wy7Ml/AsK5irj9/+/Z/9j82Ag=="; \ No newline at end of file diff --git a/vet/lib/assets/style.css b/vet/lib/assets/style.css new file mode 100644 index 0000000..2ab8b83 --- /dev/null +++ b/vet/lib/assets/style.css @@ -0,0 +1,1611 @@ +@layer typedoc { + :root { + /* Light */ + --light-color-background: #f2f4f8; + --light-color-background-secondary: #eff0f1; + --light-color-warning-text: #222; + --light-color-background-warning: #e6e600; + --light-color-accent: #c5c7c9; + --light-color-active-menu-item: var(--light-color-accent); + --light-color-text: #222; + --light-color-text-aside: #6e6e6e; + + --light-color-icon-background: var(--light-color-background); + --light-color-icon-text: var(--light-color-text); + + --light-color-comment-tag-text: var(--light-color-text); + --light-color-comment-tag: var(--light-color-background); + + --light-color-link: #1f70c2; + --light-color-focus-outline: #3584e4; + + --light-color-ts-keyword: #056bd6; + --light-color-ts-project: #b111c9; + --light-color-ts-module: var(--light-color-ts-project); + --light-color-ts-namespace: var(--light-color-ts-project); + --light-color-ts-enum: #7e6f15; + --light-color-ts-enum-member: var(--light-color-ts-enum); + --light-color-ts-variable: #4760ec; + --light-color-ts-function: #572be7; + --light-color-ts-class: #1f70c2; + --light-color-ts-interface: #108024; + --light-color-ts-constructor: var(--light-color-ts-class); + --light-color-ts-property: #9f5f30; + --light-color-ts-method: #be3989; + --light-color-ts-reference: #ff4d82; + --light-color-ts-call-signature: var(--light-color-ts-method); + --light-color-ts-index-signature: var(--light-color-ts-property); + --light-color-ts-constructor-signature: var( + --light-color-ts-constructor + ); + --light-color-ts-parameter: var(--light-color-ts-variable); + /* type literal not included as links will never be generated to it */ + --light-color-ts-type-parameter: #a55c0e; + --light-color-ts-accessor: #c73c3c; + --light-color-ts-get-signature: var(--light-color-ts-accessor); + --light-color-ts-set-signature: var(--light-color-ts-accessor); + --light-color-ts-type-alias: #d51270; + /* reference not included as links will be colored with the kind that it points to */ + --light-color-document: #000000; + + --light-color-alert-note: #0969d9; + --light-color-alert-tip: #1a7f37; + --light-color-alert-important: #8250df; + --light-color-alert-warning: #9a6700; + --light-color-alert-caution: #cf222e; + + --light-external-icon: url("data:image/svg+xml;utf8,"); + --light-color-scheme: light; + + /* Dark */ + --dark-color-background: #2b2e33; + --dark-color-background-secondary: #1e2024; + --dark-color-background-warning: #bebe00; + --dark-color-warning-text: #222; + --dark-color-accent: #9096a2; + --dark-color-active-menu-item: #5d5d6a; + --dark-color-text: #f5f5f5; + --dark-color-text-aside: #dddddd; + + --dark-color-icon-background: var(--dark-color-background-secondary); + --dark-color-icon-text: var(--dark-color-text); + + --dark-color-comment-tag-text: var(--dark-color-text); + --dark-color-comment-tag: var(--dark-color-background); + + --dark-color-link: #00aff4; + --dark-color-focus-outline: #4c97f2; + + --dark-color-ts-keyword: #3399ff; + --dark-color-ts-project: #e358ff; + --dark-color-ts-module: var(--dark-color-ts-project); + --dark-color-ts-namespace: var(--dark-color-ts-project); + --dark-color-ts-enum: #f4d93e; + --dark-color-ts-enum-member: var(--dark-color-ts-enum); + --dark-color-ts-variable: #798dff; + --dark-color-ts-function: #a280ff; + --dark-color-ts-class: #8ac4ff; + --dark-color-ts-interface: #6cff87; + --dark-color-ts-constructor: var(--dark-color-ts-class); + --dark-color-ts-property: #ff984d; + --dark-color-ts-method: #ff4db8; + --dark-color-ts-reference: #ff4d82; + --dark-color-ts-call-signature: var(--dark-color-ts-method); + --dark-color-ts-index-signature: var(--dark-color-ts-property); + --dark-color-ts-constructor-signature: var(--dark-color-ts-constructor); + --dark-color-ts-parameter: var(--dark-color-ts-variable); + /* type literal not included as links will never be generated to it */ + --dark-color-ts-type-parameter: #e07d13; + --dark-color-ts-accessor: #ff6060; + --dark-color-ts-get-signature: var(--dark-color-ts-accessor); + --dark-color-ts-set-signature: var(--dark-color-ts-accessor); + --dark-color-ts-type-alias: #ff6492; + /* reference not included as links will be colored with the kind that it points to */ + --dark-color-document: #ffffff; + + --dark-color-alert-note: #0969d9; + --dark-color-alert-tip: #1a7f37; + --dark-color-alert-important: #8250df; + --dark-color-alert-warning: #9a6700; + --dark-color-alert-caution: #cf222e; + + --dark-external-icon: url("data:image/svg+xml;utf8,"); + --dark-color-scheme: dark; + } + + @media (prefers-color-scheme: light) { + :root { + --color-background: var(--light-color-background); + --color-background-secondary: var( + --light-color-background-secondary + ); + --color-background-warning: var(--light-color-background-warning); + --color-warning-text: var(--light-color-warning-text); + --color-accent: var(--light-color-accent); + --color-active-menu-item: var(--light-color-active-menu-item); + --color-text: var(--light-color-text); + --color-text-aside: var(--light-color-text-aside); + + --color-icon-background: var(--light-color-icon-background); + --color-icon-text: var(--light-color-icon-text); + + --color-comment-tag-text: var(--light-color-text); + --color-comment-tag: var(--light-color-background); + + --color-link: var(--light-color-link); + --color-focus-outline: var(--light-color-focus-outline); + + --color-ts-keyword: var(--light-color-ts-keyword); + --color-ts-project: var(--light-color-ts-project); + --color-ts-module: var(--light-color-ts-module); + --color-ts-namespace: var(--light-color-ts-namespace); + --color-ts-enum: var(--light-color-ts-enum); + --color-ts-enum-member: var(--light-color-ts-enum-member); + --color-ts-variable: var(--light-color-ts-variable); + --color-ts-function: var(--light-color-ts-function); + --color-ts-class: var(--light-color-ts-class); + --color-ts-interface: var(--light-color-ts-interface); + --color-ts-constructor: var(--light-color-ts-constructor); + --color-ts-property: var(--light-color-ts-property); + --color-ts-method: var(--light-color-ts-method); + --color-ts-reference: var(--light-color-ts-reference); + --color-ts-call-signature: var(--light-color-ts-call-signature); + --color-ts-index-signature: var(--light-color-ts-index-signature); + --color-ts-constructor-signature: var( + --light-color-ts-constructor-signature + ); + --color-ts-parameter: var(--light-color-ts-parameter); + --color-ts-type-parameter: var(--light-color-ts-type-parameter); + --color-ts-accessor: var(--light-color-ts-accessor); + --color-ts-get-signature: var(--light-color-ts-get-signature); + --color-ts-set-signature: var(--light-color-ts-set-signature); + --color-ts-type-alias: var(--light-color-ts-type-alias); + --color-document: var(--light-color-document); + + --color-alert-note: var(--light-color-alert-note); + --color-alert-tip: var(--light-color-alert-tip); + --color-alert-important: var(--light-color-alert-important); + --color-alert-warning: var(--light-color-alert-warning); + --color-alert-caution: var(--light-color-alert-caution); + + --external-icon: var(--light-external-icon); + --color-scheme: var(--light-color-scheme); + } + } + + @media (prefers-color-scheme: dark) { + :root { + --color-background: var(--dark-color-background); + --color-background-secondary: var( + --dark-color-background-secondary + ); + --color-background-warning: var(--dark-color-background-warning); + --color-warning-text: var(--dark-color-warning-text); + --color-accent: var(--dark-color-accent); + --color-active-menu-item: var(--dark-color-active-menu-item); + --color-text: var(--dark-color-text); + --color-text-aside: var(--dark-color-text-aside); + + --color-icon-background: var(--dark-color-icon-background); + --color-icon-text: var(--dark-color-icon-text); + + --color-comment-tag-text: var(--dark-color-text); + --color-comment-tag: var(--dark-color-background); + + --color-link: var(--dark-color-link); + --color-focus-outline: var(--dark-color-focus-outline); + + --color-ts-keyword: var(--dark-color-ts-keyword); + --color-ts-project: var(--dark-color-ts-project); + --color-ts-module: var(--dark-color-ts-module); + --color-ts-namespace: var(--dark-color-ts-namespace); + --color-ts-enum: var(--dark-color-ts-enum); + --color-ts-enum-member: var(--dark-color-ts-enum-member); + --color-ts-variable: var(--dark-color-ts-variable); + --color-ts-function: var(--dark-color-ts-function); + --color-ts-class: var(--dark-color-ts-class); + --color-ts-interface: var(--dark-color-ts-interface); + --color-ts-constructor: var(--dark-color-ts-constructor); + --color-ts-property: var(--dark-color-ts-property); + --color-ts-method: var(--dark-color-ts-method); + --color-ts-reference: var(--dark-color-ts-reference); + --color-ts-call-signature: var(--dark-color-ts-call-signature); + --color-ts-index-signature: var(--dark-color-ts-index-signature); + --color-ts-constructor-signature: var( + --dark-color-ts-constructor-signature + ); + --color-ts-parameter: var(--dark-color-ts-parameter); + --color-ts-type-parameter: var(--dark-color-ts-type-parameter); + --color-ts-accessor: var(--dark-color-ts-accessor); + --color-ts-get-signature: var(--dark-color-ts-get-signature); + --color-ts-set-signature: var(--dark-color-ts-set-signature); + --color-ts-type-alias: var(--dark-color-ts-type-alias); + --color-document: var(--dark-color-document); + + --color-alert-note: var(--dark-color-alert-note); + --color-alert-tip: var(--dark-color-alert-tip); + --color-alert-important: var(--dark-color-alert-important); + --color-alert-warning: var(--dark-color-alert-warning); + --color-alert-caution: var(--dark-color-alert-caution); + + --external-icon: var(--dark-external-icon); + --color-scheme: var(--dark-color-scheme); + } + } + + html { + color-scheme: var(--color-scheme); + } + + body { + margin: 0; + } + + :root[data-theme="light"] { + --color-background: var(--light-color-background); + --color-background-secondary: var(--light-color-background-secondary); + --color-background-warning: var(--light-color-background-warning); + --color-warning-text: var(--light-color-warning-text); + --color-icon-background: var(--light-color-icon-background); + --color-accent: var(--light-color-accent); + --color-active-menu-item: var(--light-color-active-menu-item); + --color-text: var(--light-color-text); + --color-text-aside: var(--light-color-text-aside); + --color-icon-text: var(--light-color-icon-text); + + --color-comment-tag-text: var(--light-color-text); + --color-comment-tag: var(--light-color-background); + + --color-link: var(--light-color-link); + --color-focus-outline: var(--light-color-focus-outline); + + --color-ts-keyword: var(--light-color-ts-keyword); + --color-ts-project: var(--light-color-ts-project); + --color-ts-module: var(--light-color-ts-module); + --color-ts-namespace: var(--light-color-ts-namespace); + --color-ts-enum: var(--light-color-ts-enum); + --color-ts-enum-member: var(--light-color-ts-enum-member); + --color-ts-variable: var(--light-color-ts-variable); + --color-ts-function: var(--light-color-ts-function); + --color-ts-class: var(--light-color-ts-class); + --color-ts-interface: var(--light-color-ts-interface); + --color-ts-constructor: var(--light-color-ts-constructor); + --color-ts-property: var(--light-color-ts-property); + --color-ts-method: var(--light-color-ts-method); + --color-ts-reference: var(--light-color-ts-reference); + --color-ts-call-signature: var(--light-color-ts-call-signature); + --color-ts-index-signature: var(--light-color-ts-index-signature); + --color-ts-constructor-signature: var( + --light-color-ts-constructor-signature + ); + --color-ts-parameter: var(--light-color-ts-parameter); + --color-ts-type-parameter: var(--light-color-ts-type-parameter); + --color-ts-accessor: var(--light-color-ts-accessor); + --color-ts-get-signature: var(--light-color-ts-get-signature); + --color-ts-set-signature: var(--light-color-ts-set-signature); + --color-ts-type-alias: var(--light-color-ts-type-alias); + --color-document: var(--light-color-document); + + --color-note: var(--light-color-note); + --color-tip: var(--light-color-tip); + --color-important: var(--light-color-important); + --color-warning: var(--light-color-warning); + --color-caution: var(--light-color-caution); + + --external-icon: var(--light-external-icon); + --color-scheme: var(--light-color-scheme); + } + + :root[data-theme="dark"] { + --color-background: var(--dark-color-background); + --color-background-secondary: var(--dark-color-background-secondary); + --color-background-warning: var(--dark-color-background-warning); + --color-warning-text: var(--dark-color-warning-text); + --color-icon-background: var(--dark-color-icon-background); + --color-accent: var(--dark-color-accent); + --color-active-menu-item: var(--dark-color-active-menu-item); + --color-text: var(--dark-color-text); + --color-text-aside: var(--dark-color-text-aside); + --color-icon-text: var(--dark-color-icon-text); + + --color-comment-tag-text: var(--dark-color-text); + --color-comment-tag: var(--dark-color-background); + + --color-link: var(--dark-color-link); + --color-focus-outline: var(--dark-color-focus-outline); + + --color-ts-keyword: var(--dark-color-ts-keyword); + --color-ts-project: var(--dark-color-ts-project); + --color-ts-module: var(--dark-color-ts-module); + --color-ts-namespace: var(--dark-color-ts-namespace); + --color-ts-enum: var(--dark-color-ts-enum); + --color-ts-enum-member: var(--dark-color-ts-enum-member); + --color-ts-variable: var(--dark-color-ts-variable); + --color-ts-function: var(--dark-color-ts-function); + --color-ts-class: var(--dark-color-ts-class); + --color-ts-interface: var(--dark-color-ts-interface); + --color-ts-constructor: var(--dark-color-ts-constructor); + --color-ts-property: var(--dark-color-ts-property); + --color-ts-method: var(--dark-color-ts-method); + --color-ts-reference: var(--dark-color-ts-reference); + --color-ts-call-signature: var(--dark-color-ts-call-signature); + --color-ts-index-signature: var(--dark-color-ts-index-signature); + --color-ts-constructor-signature: var( + --dark-color-ts-constructor-signature + ); + --color-ts-parameter: var(--dark-color-ts-parameter); + --color-ts-type-parameter: var(--dark-color-ts-type-parameter); + --color-ts-accessor: var(--dark-color-ts-accessor); + --color-ts-get-signature: var(--dark-color-ts-get-signature); + --color-ts-set-signature: var(--dark-color-ts-set-signature); + --color-ts-type-alias: var(--dark-color-ts-type-alias); + --color-document: var(--dark-color-document); + + --color-note: var(--dark-color-note); + --color-tip: var(--dark-color-tip); + --color-important: var(--dark-color-important); + --color-warning: var(--dark-color-warning); + --color-caution: var(--dark-color-caution); + + --external-icon: var(--dark-external-icon); + --color-scheme: var(--dark-color-scheme); + } + + *:focus-visible, + .tsd-accordion-summary:focus-visible svg { + outline: 2px solid var(--color-focus-outline); + } + + .always-visible, + .always-visible .tsd-signatures { + display: inherit !important; + } + + h1, + h2, + h3, + h4, + h5, + h6 { + line-height: 1.2; + } + + h1 { + font-size: 1.875rem; + margin: 0.67rem 0; + } + + h2 { + font-size: 1.5rem; + margin: 0.83rem 0; + } + + h3 { + font-size: 1.25rem; + margin: 1rem 0; + } + + h4 { + font-size: 1.05rem; + margin: 1.33rem 0; + } + + h5 { + font-size: 1rem; + margin: 1.5rem 0; + } + + h6 { + font-size: 0.875rem; + margin: 2.33rem 0; + } + + dl, + menu, + ol, + ul { + margin: 1em 0; + } + + dd { + margin: 0 0 0 34px; + } + + .container { + max-width: 1700px; + padding: 0 2rem; + } + + /* Footer */ + footer { + border-top: 1px solid var(--color-accent); + padding-top: 1rem; + padding-bottom: 1rem; + max-height: 3.5rem; + } + footer > p { + margin: 0 1em; + } + + .container-main { + margin: 0 auto; + /* toolbar, footer, margin */ + min-height: calc(100vh - 41px - 56px - 4rem); + } + + @keyframes fade-in { + from { + opacity: 0; + } + to { + opacity: 1; + } + } + @keyframes fade-out { + from { + opacity: 1; + visibility: visible; + } + to { + opacity: 0; + } + } + @keyframes fade-in-delayed { + 0% { + opacity: 0; + } + 33% { + opacity: 0; + } + 100% { + opacity: 1; + } + } + @keyframes fade-out-delayed { + 0% { + opacity: 1; + visibility: visible; + } + 66% { + opacity: 0; + } + 100% { + opacity: 0; + } + } + @keyframes pop-in-from-right { + from { + transform: translate(100%, 0); + } + to { + transform: translate(0, 0); + } + } + @keyframes pop-out-to-right { + from { + transform: translate(0, 0); + visibility: visible; + } + to { + transform: translate(100%, 0); + } + } + body { + background: var(--color-background); + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", + Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; + font-size: 16px; + color: var(--color-text); + } + + a { + color: var(--color-link); + text-decoration: none; + } + a:hover { + text-decoration: underline; + } + a.external[target="_blank"] { + background-image: var(--external-icon); + background-position: top 3px right; + background-repeat: no-repeat; + padding-right: 13px; + } + a.tsd-anchor-link { + color: var(--color-text); + } + + code, + pre { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + padding: 0.2em; + margin: 0; + font-size: 0.875rem; + border-radius: 0.8em; + } + + pre { + position: relative; + white-space: pre-wrap; + word-wrap: break-word; + padding: 10px; + border: 1px solid var(--color-accent); + margin-bottom: 8px; + } + pre code { + padding: 0; + font-size: 100%; + } + pre > button { + position: absolute; + top: 10px; + right: 10px; + opacity: 0; + transition: opacity 0.1s; + box-sizing: border-box; + } + pre:hover > button, + pre > button.visible { + opacity: 1; + } + + blockquote { + margin: 1em 0; + padding-left: 1em; + border-left: 4px solid gray; + } + + .tsd-typography { + line-height: 1.333em; + } + .tsd-typography ul { + list-style: square; + padding: 0 0 0 20px; + margin: 0; + } + .tsd-typography .tsd-index-panel h3, + .tsd-index-panel .tsd-typography h3, + .tsd-typography h4, + .tsd-typography h5, + .tsd-typography h6 { + font-size: 1em; + } + .tsd-typography h5, + .tsd-typography h6 { + font-weight: normal; + } + .tsd-typography p, + .tsd-typography ul, + .tsd-typography ol { + margin: 1em 0; + } + .tsd-typography table { + border-collapse: collapse; + border: none; + } + .tsd-typography td, + .tsd-typography th { + padding: 6px 13px; + border: 1px solid var(--color-accent); + } + .tsd-typography thead, + .tsd-typography tr:nth-child(even) { + background-color: var(--color-background-secondary); + } + + .tsd-alert { + padding: 8px 16px; + margin-bottom: 16px; + border-left: 0.25em solid var(--alert-color); + } + .tsd-alert blockquote > :last-child, + .tsd-alert > :last-child { + margin-bottom: 0; + } + .tsd-alert-title { + color: var(--alert-color); + display: inline-flex; + align-items: center; + } + .tsd-alert-title span { + margin-left: 4px; + } + + .tsd-alert-note { + --alert-color: var(--color-alert-note); + } + .tsd-alert-tip { + --alert-color: var(--color-alert-tip); + } + .tsd-alert-important { + --alert-color: var(--color-alert-important); + } + .tsd-alert-warning { + --alert-color: var(--color-alert-warning); + } + .tsd-alert-caution { + --alert-color: var(--color-alert-caution); + } + + .tsd-breadcrumb { + margin: 0; + padding: 0; + color: var(--color-text-aside); + } + .tsd-breadcrumb a { + color: var(--color-text-aside); + text-decoration: none; + } + .tsd-breadcrumb a:hover { + text-decoration: underline; + } + .tsd-breadcrumb li { + display: inline; + } + .tsd-breadcrumb li:after { + content: " / "; + } + + .tsd-comment-tags { + display: flex; + flex-direction: column; + } + dl.tsd-comment-tag-group { + display: flex; + align-items: center; + overflow: hidden; + margin: 0.5em 0; + } + dl.tsd-comment-tag-group dt { + display: flex; + margin-right: 0.5em; + font-size: 0.875em; + font-weight: normal; + } + dl.tsd-comment-tag-group dd { + margin: 0; + } + code.tsd-tag { + padding: 0.25em 0.4em; + border: 0.1em solid var(--color-accent); + margin-right: 0.25em; + font-size: 70%; + } + h1 code.tsd-tag:first-of-type { + margin-left: 0.25em; + } + + dl.tsd-comment-tag-group dd:before, + dl.tsd-comment-tag-group dd:after { + content: " "; + } + dl.tsd-comment-tag-group dd pre, + dl.tsd-comment-tag-group dd:after { + clear: both; + } + dl.tsd-comment-tag-group p { + margin: 0; + } + + .tsd-panel.tsd-comment .lead { + font-size: 1.1em; + line-height: 1.333em; + margin-bottom: 2em; + } + .tsd-panel.tsd-comment .lead:last-child { + margin-bottom: 0; + } + + .tsd-filter-visibility h4 { + font-size: 1rem; + padding-top: 0.75rem; + padding-bottom: 0.5rem; + margin: 0; + } + .tsd-filter-item:not(:last-child) { + margin-bottom: 0.5rem; + } + .tsd-filter-input { + display: flex; + width: -moz-fit-content; + width: fit-content; + align-items: center; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + } + .tsd-filter-input input[type="checkbox"] { + cursor: pointer; + position: absolute; + width: 1.5em; + height: 1.5em; + opacity: 0; + } + .tsd-filter-input input[type="checkbox"]:disabled { + pointer-events: none; + } + .tsd-filter-input svg { + cursor: pointer; + width: 1.5em; + height: 1.5em; + margin-right: 0.5em; + border-radius: 0.33em; + /* Leaving this at full opacity breaks event listeners on Firefox. + Don't remove unless you know what you're doing. */ + opacity: 0.99; + } + .tsd-filter-input input[type="checkbox"]:focus-visible + svg { + outline: 2px solid var(--color-focus-outline); + } + .tsd-checkbox-background { + fill: var(--color-accent); + } + input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { + stroke: var(--color-text); + } + .tsd-filter-input input:disabled ~ svg > .tsd-checkbox-background { + fill: var(--color-background); + stroke: var(--color-accent); + stroke-width: 0.25rem; + } + .tsd-filter-input input:disabled ~ svg > .tsd-checkbox-checkmark { + stroke: var(--color-accent); + } + + .settings-label { + font-weight: bold; + text-transform: uppercase; + display: inline-block; + } + + .tsd-filter-visibility .settings-label { + margin: 0.75rem 0 0.5rem 0; + } + + .tsd-theme-toggle .settings-label { + margin: 0.75rem 0.75rem 0 0; + } + + .tsd-hierarchy h4 label:hover span { + text-decoration: underline; + } + + .tsd-hierarchy { + list-style: square; + margin: 0; + } + .tsd-hierarchy-target { + font-weight: bold; + } + .tsd-hierarchy-toggle { + color: var(--color-link); + cursor: pointer; + } + + .tsd-full-hierarchy:not(:last-child) { + margin-bottom: 1em; + padding-bottom: 1em; + border-bottom: 1px solid var(--color-accent); + } + .tsd-full-hierarchy, + .tsd-full-hierarchy ul { + list-style: none; + margin: 0; + padding: 0; + } + .tsd-full-hierarchy ul { + padding-left: 1.5rem; + } + .tsd-full-hierarchy a { + padding: 0.25rem 0 !important; + font-size: 1rem; + display: inline-flex; + align-items: center; + color: var(--color-text); + } + .tsd-full-hierarchy svg[data-dropdown] { + cursor: pointer; + } + .tsd-full-hierarchy svg[data-dropdown="false"] { + transform: rotate(-90deg); + } + .tsd-full-hierarchy svg[data-dropdown="false"] ~ ul { + display: none; + } + + .tsd-panel-group.tsd-index-group { + margin-bottom: 0; + } + .tsd-index-panel .tsd-index-list { + list-style: none; + line-height: 1.333em; + margin: 0; + padding: 0.25rem 0 0 0; + overflow: hidden; + display: grid; + grid-template-columns: repeat(3, 1fr); + column-gap: 1rem; + grid-template-rows: auto; + } + @media (max-width: 1024px) { + .tsd-index-panel .tsd-index-list { + grid-template-columns: repeat(2, 1fr); + } + } + @media (max-width: 768px) { + .tsd-index-panel .tsd-index-list { + grid-template-columns: repeat(1, 1fr); + } + } + .tsd-index-panel .tsd-index-list li { + -webkit-page-break-inside: avoid; + -moz-page-break-inside: avoid; + -ms-page-break-inside: avoid; + -o-page-break-inside: avoid; + page-break-inside: avoid; + } + + .tsd-flag { + display: inline-block; + padding: 0.25em 0.4em; + border-radius: 4px; + color: var(--color-comment-tag-text); + background-color: var(--color-comment-tag); + text-indent: 0; + font-size: 75%; + line-height: 1; + font-weight: normal; + } + + .tsd-anchor { + position: relative; + top: -100px; + } + + .tsd-member { + position: relative; + } + .tsd-member .tsd-anchor + h3 { + display: flex; + align-items: center; + margin-top: 0; + margin-bottom: 0; + border-bottom: none; + } + + .tsd-navigation.settings { + margin: 1rem 0; + } + .tsd-navigation > a, + .tsd-navigation .tsd-accordion-summary { + width: calc(100% - 0.25rem); + display: flex; + align-items: center; + } + .tsd-navigation a, + .tsd-navigation summary > span, + .tsd-page-navigation a { + display: flex; + width: calc(100% - 0.25rem); + align-items: center; + padding: 0.25rem; + color: var(--color-text); + text-decoration: none; + box-sizing: border-box; + } + .tsd-navigation a.current, + .tsd-page-navigation a.current { + background: var(--color-active-menu-item); + } + .tsd-navigation a:hover, + .tsd-page-navigation a:hover { + text-decoration: underline; + } + .tsd-navigation ul, + .tsd-page-navigation ul { + margin-top: 0; + margin-bottom: 0; + padding: 0; + list-style: none; + } + .tsd-navigation li, + .tsd-page-navigation li { + padding: 0; + max-width: 100%; + } + .tsd-navigation .tsd-nav-link { + display: none; + } + .tsd-nested-navigation { + margin-left: 3rem; + } + .tsd-nested-navigation > li > details { + margin-left: -1.5rem; + } + .tsd-small-nested-navigation { + margin-left: 1.5rem; + } + .tsd-small-nested-navigation > li > details { + margin-left: -1.5rem; + } + + .tsd-page-navigation-section { + margin-left: 10px; + } + .tsd-page-navigation-section > summary { + padding: 0.25rem; + } + .tsd-page-navigation-section > div { + margin-left: 20px; + } + .tsd-page-navigation ul { + padding-left: 1.75rem; + } + + #tsd-sidebar-links a { + margin-top: 0; + margin-bottom: 0.5rem; + line-height: 1.25rem; + } + #tsd-sidebar-links a:last-of-type { + margin-bottom: 0; + } + + a.tsd-index-link { + padding: 0.25rem 0 !important; + font-size: 1rem; + line-height: 1.25rem; + display: inline-flex; + align-items: center; + color: var(--color-text); + } + .tsd-accordion-summary { + list-style-type: none; /* hide marker on non-safari */ + outline: none; /* broken on safari, so just hide it */ + } + .tsd-accordion-summary::-webkit-details-marker { + display: none; /* hide marker on safari */ + } + .tsd-accordion-summary, + .tsd-accordion-summary a { + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; + + cursor: pointer; + } + .tsd-accordion-summary a { + width: calc(100% - 1.5rem); + } + .tsd-accordion-summary > * { + margin-top: 0; + margin-bottom: 0; + padding-top: 0; + padding-bottom: 0; + } + .tsd-accordion .tsd-accordion-summary > svg { + margin-left: 0.25rem; + vertical-align: text-top; + } + /* + * We need to be careful to target the arrow indicating whether the accordion + * is open, but not any other SVGs included in the details element. + */ + .tsd-accordion:not([open]) > .tsd-accordion-summary > svg:first-child, + .tsd-accordion:not([open]) > .tsd-accordion-summary > h1 > svg:first-child, + .tsd-accordion:not([open]) > .tsd-accordion-summary > h2 > svg:first-child, + .tsd-accordion:not([open]) > .tsd-accordion-summary > h3 > svg:first-child, + .tsd-accordion:not([open]) > .tsd-accordion-summary > h4 > svg:first-child, + .tsd-accordion:not([open]) > .tsd-accordion-summary > h5 > svg:first-child { + transform: rotate(-90deg); + } + .tsd-index-content > :not(:first-child) { + margin-top: 0.75rem; + } + .tsd-index-heading { + margin-top: 1.5rem; + margin-bottom: 0.75rem; + } + + .tsd-no-select { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + } + .tsd-kind-icon { + margin-right: 0.5rem; + width: 1.25rem; + height: 1.25rem; + min-width: 1.25rem; + min-height: 1.25rem; + } + .tsd-signature > .tsd-kind-icon { + margin-right: 0.8rem; + } + + .tsd-panel { + margin-bottom: 2.5rem; + } + .tsd-panel.tsd-member { + margin-bottom: 4rem; + } + .tsd-panel:empty { + display: none; + } + .tsd-panel > h1, + .tsd-panel > h2, + .tsd-panel > h3 { + margin: 1.5rem -1.5rem 0.75rem -1.5rem; + padding: 0 1.5rem 0.75rem 1.5rem; + } + .tsd-panel > h1.tsd-before-signature, + .tsd-panel > h2.tsd-before-signature, + .tsd-panel > h3.tsd-before-signature { + margin-bottom: 0; + border-bottom: none; + } + + .tsd-panel-group { + margin: 2rem 0; + } + .tsd-panel-group.tsd-index-group { + margin: 2rem 0; + } + .tsd-panel-group.tsd-index-group details { + margin: 2rem 0; + } + .tsd-panel-group > .tsd-accordion-summary { + margin-bottom: 1rem; + } + + #tsd-search { + transition: background-color 0.2s; + } + #tsd-search .title { + position: relative; + z-index: 2; + } + #tsd-search .field { + position: absolute; + left: 0; + top: 0; + right: 2.5rem; + height: 100%; + } + #tsd-search .field input { + box-sizing: border-box; + position: relative; + top: -50px; + z-index: 1; + width: 100%; + padding: 0 10px; + opacity: 0; + outline: 0; + border: 0; + background: transparent; + color: var(--color-text); + } + #tsd-search .field label { + position: absolute; + overflow: hidden; + right: -40px; + } + #tsd-search .field input, + #tsd-search .title, + #tsd-toolbar-links a { + transition: opacity 0.2s; + } + #tsd-search .results { + position: absolute; + visibility: hidden; + top: 40px; + width: 100%; + margin: 0; + padding: 0; + list-style: none; + box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); + } + #tsd-search .results li { + background-color: var(--color-background); + line-height: initial; + padding: 4px; + } + #tsd-search .results li:nth-child(even) { + background-color: var(--color-background-secondary); + } + #tsd-search .results li.state { + display: none; + } + #tsd-search .results li.current:not(.no-results), + #tsd-search .results li:hover:not(.no-results) { + background-color: var(--color-accent); + } + #tsd-search .results a { + display: flex; + align-items: center; + padding: 0.25rem; + box-sizing: border-box; + } + #tsd-search .results a:before { + top: 10px; + } + #tsd-search .results span.parent { + color: var(--color-text-aside); + font-weight: normal; + } + #tsd-search.has-focus { + background-color: var(--color-accent); + } + #tsd-search.has-focus .field input { + top: 0; + opacity: 1; + } + #tsd-search.has-focus .title, + #tsd-search.has-focus #tsd-toolbar-links a { + z-index: 0; + opacity: 0; + } + #tsd-search.has-focus .results { + visibility: visible; + } + #tsd-search.loading .results li.state.loading { + display: block; + } + #tsd-search.failure .results li.state.failure { + display: block; + } + + #tsd-toolbar-links { + position: absolute; + top: 0; + right: 2rem; + height: 100%; + display: flex; + align-items: center; + justify-content: flex-end; + } + #tsd-toolbar-links a { + margin-left: 1.5rem; + } + #tsd-toolbar-links a:hover { + text-decoration: underline; + } + + .tsd-signature { + margin: 0 0 1rem 0; + padding: 1rem 0.5rem; + border: 1px solid var(--color-accent); + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + font-size: 14px; + overflow-x: auto; + } + + .tsd-signature-keyword { + color: var(--color-ts-keyword); + font-weight: normal; + } + + .tsd-signature-symbol { + color: var(--color-text-aside); + font-weight: normal; + } + + .tsd-signature-type { + font-style: italic; + font-weight: normal; + } + + .tsd-signatures { + padding: 0; + margin: 0 0 1em 0; + list-style-type: none; + } + .tsd-signatures .tsd-signature { + margin: 0; + border-color: var(--color-accent); + border-width: 1px 0; + transition: background-color 0.1s; + } + .tsd-signatures .tsd-index-signature:not(:last-child) { + margin-bottom: 1em; + } + .tsd-signatures .tsd-index-signature .tsd-signature { + border-width: 1px; + } + .tsd-description .tsd-signatures .tsd-signature { + border-width: 1px; + } + + ul.tsd-parameter-list, + ul.tsd-type-parameter-list { + list-style: square; + margin: 0; + padding-left: 20px; + } + ul.tsd-parameter-list > li.tsd-parameter-signature, + ul.tsd-type-parameter-list > li.tsd-parameter-signature { + list-style: none; + margin-left: -20px; + } + ul.tsd-parameter-list h5, + ul.tsd-type-parameter-list h5 { + font-size: 16px; + margin: 1em 0 0.5em 0; + } + .tsd-sources { + margin-top: 1rem; + font-size: 0.875em; + } + .tsd-sources a { + color: var(--color-text-aside); + text-decoration: underline; + } + .tsd-sources ul { + list-style: none; + padding: 0; + } + + .tsd-page-toolbar { + position: sticky; + z-index: 1; + top: 0; + left: 0; + width: 100%; + color: var(--color-text); + background: var(--color-background-secondary); + border-bottom: 1px var(--color-accent) solid; + transition: transform 0.3s ease-in-out; + } + .tsd-page-toolbar a { + color: var(--color-text); + text-decoration: none; + } + .tsd-page-toolbar a.title { + font-weight: bold; + } + .tsd-page-toolbar a.title:hover { + text-decoration: underline; + } + .tsd-page-toolbar .tsd-toolbar-contents { + display: flex; + justify-content: space-between; + height: 2.5rem; + margin: 0 auto; + } + .tsd-page-toolbar .table-cell { + position: relative; + white-space: nowrap; + line-height: 40px; + } + .tsd-page-toolbar .table-cell:first-child { + width: 100%; + } + .tsd-page-toolbar .tsd-toolbar-icon { + box-sizing: border-box; + line-height: 0; + padding: 12px 0; + } + + .tsd-widget { + display: inline-block; + overflow: hidden; + opacity: 0.8; + height: 40px; + transition: + opacity 0.1s, + background-color 0.2s; + vertical-align: bottom; + cursor: pointer; + } + .tsd-widget:hover { + opacity: 0.9; + } + .tsd-widget.active { + opacity: 1; + background-color: var(--color-accent); + } + .tsd-widget.no-caption { + width: 40px; + } + .tsd-widget.no-caption:before { + margin: 0; + } + + .tsd-widget.options, + .tsd-widget.menu { + display: none; + } + input[type="checkbox"] + .tsd-widget:before { + background-position: -120px 0; + } + input[type="checkbox"]:checked + .tsd-widget:before { + background-position: -160px 0; + } + + img { + max-width: 100%; + } + + .tsd-member-summary-name { + display: inline-flex; + align-items: center; + padding: 0.25rem; + text-decoration: none; + } + + .tsd-anchor-icon { + display: inline-flex; + align-items: center; + margin-left: 0.5rem; + color: var(--color-text); + } + + .tsd-anchor-icon svg { + width: 1em; + height: 1em; + visibility: hidden; + } + + .tsd-member-summary-name:hover > .tsd-anchor-icon svg, + .tsd-anchor-link:hover > .tsd-anchor-icon svg { + visibility: visible; + } + + .deprecated { + text-decoration: line-through !important; + } + + .warning { + padding: 1rem; + color: var(--color-warning-text); + background: var(--color-background-warning); + } + + .tsd-kind-project { + color: var(--color-ts-project); + } + .tsd-kind-module { + color: var(--color-ts-module); + } + .tsd-kind-namespace { + color: var(--color-ts-namespace); + } + .tsd-kind-enum { + color: var(--color-ts-enum); + } + .tsd-kind-enum-member { + color: var(--color-ts-enum-member); + } + .tsd-kind-variable { + color: var(--color-ts-variable); + } + .tsd-kind-function { + color: var(--color-ts-function); + } + .tsd-kind-class { + color: var(--color-ts-class); + } + .tsd-kind-interface { + color: var(--color-ts-interface); + } + .tsd-kind-constructor { + color: var(--color-ts-constructor); + } + .tsd-kind-property { + color: var(--color-ts-property); + } + .tsd-kind-method { + color: var(--color-ts-method); + } + .tsd-kind-reference { + color: var(--color-ts-reference); + } + .tsd-kind-call-signature { + color: var(--color-ts-call-signature); + } + .tsd-kind-index-signature { + color: var(--color-ts-index-signature); + } + .tsd-kind-constructor-signature { + color: var(--color-ts-constructor-signature); + } + .tsd-kind-parameter { + color: var(--color-ts-parameter); + } + .tsd-kind-type-parameter { + color: var(--color-ts-type-parameter); + } + .tsd-kind-accessor { + color: var(--color-ts-accessor); + } + .tsd-kind-get-signature { + color: var(--color-ts-get-signature); + } + .tsd-kind-set-signature { + color: var(--color-ts-set-signature); + } + .tsd-kind-type-alias { + color: var(--color-ts-type-alias); + } + + /* if we have a kind icon, don't color the text by kind */ + .tsd-kind-icon ~ span { + color: var(--color-text); + } + + * { + scrollbar-width: thin; + scrollbar-color: var(--color-accent) var(--color-icon-background); + } + + *::-webkit-scrollbar { + width: 0.75rem; + } + + *::-webkit-scrollbar-track { + background: var(--color-icon-background); + } + + *::-webkit-scrollbar-thumb { + background-color: var(--color-accent); + border-radius: 999rem; + border: 0.25rem solid var(--color-icon-background); + } + + /* mobile */ + @media (max-width: 769px) { + .tsd-widget.options, + .tsd-widget.menu { + display: inline-block; + } + + .container-main { + display: flex; + } + html .col-content { + float: none; + max-width: 100%; + width: 100%; + } + html .col-sidebar { + position: fixed !important; + overflow-y: auto; + -webkit-overflow-scrolling: touch; + z-index: 1024; + top: 0 !important; + bottom: 0 !important; + left: auto !important; + right: 0 !important; + padding: 1.5rem 1.5rem 0 0; + width: 75vw; + visibility: hidden; + background-color: var(--color-background); + transform: translate(100%, 0); + } + html .col-sidebar > *:last-child { + padding-bottom: 20px; + } + html .overlay { + content: ""; + display: block; + position: fixed; + z-index: 1023; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: rgba(0, 0, 0, 0.75); + visibility: hidden; + } + + .to-has-menu .overlay { + animation: fade-in 0.4s; + } + + .to-has-menu .col-sidebar { + animation: pop-in-from-right 0.4s; + } + + .from-has-menu .overlay { + animation: fade-out 0.4s; + } + + .from-has-menu .col-sidebar { + animation: pop-out-to-right 0.4s; + } + + .has-menu body { + overflow: hidden; + } + .has-menu .overlay { + visibility: visible; + } + .has-menu .col-sidebar { + visibility: visible; + transform: translate(0, 0); + display: flex; + flex-direction: column; + gap: 1.5rem; + max-height: 100vh; + padding: 1rem 2rem; + } + .has-menu .tsd-navigation { + max-height: 100%; + } + #tsd-toolbar-links { + display: none; + } + .tsd-navigation .tsd-nav-link { + display: flex; + } + } + + /* one sidebar */ + @media (min-width: 770px) { + .container-main { + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(0, 2fr); + grid-template-areas: "sidebar content"; + margin: 2rem auto; + } + + .col-sidebar { + grid-area: sidebar; + } + .col-content { + grid-area: content; + padding: 0 1rem; + } + } + @media (min-width: 770px) and (max-width: 1399px) { + .col-sidebar { + max-height: calc(100vh - 2rem - 42px); + overflow: auto; + position: sticky; + top: 42px; + padding-top: 1rem; + } + .site-menu { + margin-top: 1rem; + } + } + + /* two sidebars */ + @media (min-width: 1200px) { + .container-main { + grid-template-columns: minmax(0, 1fr) minmax(0, 2.5fr) minmax( + 0, + 20rem + ); + grid-template-areas: "sidebar content toc"; + } + + .col-sidebar { + display: contents; + } + + .page-menu { + grid-area: toc; + padding-left: 1rem; + } + .site-menu { + grid-area: sidebar; + } + + .site-menu { + margin-top: 1rem; + } + + .page-menu, + .site-menu { + max-height: calc(100vh - 2rem - 42px); + overflow: auto; + position: sticky; + top: 42px; + } + } +} diff --git a/vet/lib/functions/src_Footer.default.html b/vet/lib/functions/src_Footer.default.html new file mode 100644 index 0000000..1e5bfd5 --- /dev/null +++ b/vet/lib/functions/src_Footer.default.html @@ -0,0 +1,3 @@ +default | vet

Function default

  • Fixed bottom app bar showing the site copyright.

    +

    Returns Element

    The footer AppBar element.

    +
diff --git a/vet/lib/functions/src_Header.default.html b/vet/lib/functions/src_Header.default.html new file mode 100644 index 0000000..1b9d7bf --- /dev/null +++ b/vet/lib/functions/src_Header.default.html @@ -0,0 +1,5 @@ +default | vet

Function default

  • Fixed top app bar with the title/logo and an Admin button.

    +

    Uses useNavigate, so it must be rendered inside a router. Clicking the +title navigates to /; the Admin button navigates to /admin.

    +

    Returns Element

    The header AppBar element.

    +
diff --git a/vet/lib/functions/src_Home.default.html b/vet/lib/functions/src_Home.default.html new file mode 100644 index 0000000..fe57343 --- /dev/null +++ b/vet/lib/functions/src_Home.default.html @@ -0,0 +1,5 @@ +default | vet

Function default

  • Render the demo landing page: resource grid, live preview, appointment form +and (when present) a live SSE stream.

    +

    Returns Element

    The page container, or a "no resources" notice when the spec +exposes none.

    +
diff --git a/vet/lib/functions/src_shared-theme_AppTheme.default.html b/vet/lib/functions/src_shared-theme_AppTheme.default.html new file mode 100644 index 0000000..c4c7d04 --- /dev/null +++ b/vet/lib/functions/src_shared-theme_AppTheme.default.html @@ -0,0 +1,11 @@ +default | vet
  • Provide the MUI theme, color-mode context and CSS variables to children.

    +

    Builds the theme from getDesignTokens(mode) + getSemanticColors(mode) + +the component customizations, and re-creates it whenever the mode changes. +Also sets --bg-page, --bg-card, --bg-elevated, --border-default, +--border-subtle, --text-primary, --text-secondary and --text-muted +on a wrapper Box.

    +

    Props: children and defaultMode (see AppThemeProps).

    +

    Parameters

    • __namedParameters: AppThemeProps

    Returns Element

    <AppTheme defaultMode="dark">
    <CssBaseline />
    <App />
    </AppTheme> +
    + +
diff --git a/vet/lib/functions/src_shared-theme_themeConfig.getSemanticColors.html b/vet/lib/functions/src_shared-theme_themeConfig.getSemanticColors.html new file mode 100644 index 0000000..d7ab76a --- /dev/null +++ b/vet/lib/functions/src_shared-theme_themeConfig.getSemanticColors.html @@ -0,0 +1,9 @@ +getSemanticColors | vet
  • Resolve the semantic color groups for a color mode.

    +

    Dark mode uses fixed HSL values; light mode derives borders/text from the +gray ramp (with alpha).

    +

    Parameters

    Returns SemanticColors

    The SemanticColors for that mode.

    +
    const colors = getSemanticColors("dark");
    colors.surface.page; // "hsl(0, 0%, 9%)" +
    + +
diff --git a/vet/lib/functions/src_shared-theme_themePrimitives.getDesignTokens.html b/vet/lib/functions/src_shared-theme_themePrimitives.getDesignTokens.html new file mode 100644 index 0000000..082a6e8 --- /dev/null +++ b/vet/lib/functions/src_shared-theme_themePrimitives.getDesignTokens.html @@ -0,0 +1,8 @@ +getDesignTokens | vet

Build the MUI design tokens (palette, typography, shape, shadows) for a mode.

+

Light and dark palettes share the ramps but override specific slots in dark +mode. Also sets shadows[1] (the "baseShadow") per mode. The returned object +is spread into createTheme by AppTheme.

+
  • Parameters

    • mode: PaletteMode

      "light" or "dark".

      +

    Returns {
        palette: {
            action: { hover: string; selected: string };
            background: { default: string; paper: string };
            divider: string;
            error: { dark: string; light: string; main: string };
            flows: {
                inflows: { primary: string; surface: string; text: string };
                outflows: { primary: string; surface: string; text: string };
            };
            grey: {
                "100": string;
                "200": string;
                "300": string;
                "400": string;
                "50": string;
                "500": string;
                "600": string;
                "700": string;
                "750": string;
                "800": string;
                "850": string;
                "900": string;
            };
            info: { contrastText: string; dark: string; light: string; main: string };
            mode: PaletteMode;
            primary: {
                contrastText: string;
                dark: string;
                light: string;
                main: string;
            };
            success: { dark: string; light: string; main: string };
            text: { primary: string; secondary: string; warning: string };
            warning: { dark: string; light: string; main: string };
        };
        shadows: Shadows;
        shape: { borderRadius: number };
        typography: {
            body1: { fontSize: string };
            body2: { fontSize: string; fontWeight: number };
            caption: { fontSize: string; fontWeight: number };
            fontFamily: string;
            h1: {
                fontSize: string;
                fontWeight: number;
                letterSpacing: number;
                lineHeight: number;
            };
            h2: { fontSize: string; fontWeight: number; lineHeight: number };
            h3: { fontSize: string; lineHeight: number };
            h4: { fontSize: string; fontWeight: number; lineHeight: number };
            h5: { fontSize: string; fontWeight: number };
            h6: { fontSize: string; fontWeight: number };
            subtitle1: { fontSize: string };
            subtitle2: { fontSize: string; fontWeight: number };
        };
    }

    A MUI ThemeOptions-shaped object (palette, typography, shape, +shadows).

    +
diff --git a/vet/lib/index.html b/vet/lib/index.html new file mode 100644 index 0000000..a3dfa48 --- /dev/null +++ b/vet/lib/index.html @@ -0,0 +1 @@ +vet
diff --git a/vet/lib/interfaces/src_shared-theme_themeConfig.SemanticColors.html b/vet/lib/interfaces/src_shared-theme_themeConfig.SemanticColors.html new file mode 100644 index 0000000..2e77379 --- /dev/null +++ b/vet/lib/interfaces/src_shared-theme_themeConfig.SemanticColors.html @@ -0,0 +1,17 @@ +SemanticColors | vet

Mode-aware semantic color groups attached to the MUI theme as +theme.semantic and exposed as CSS custom properties by AppTheme.

+
interface SemanticColors {
    border: { default: string; subtle: string };
    surface: { card: string; elevated: string; page: string };
    text: { muted: string; primary: string; secondary: string };
}

Properties

Properties

border: { default: string; subtle: string }

Border colors.

+

Type declaration

  • default: string

    Default border (--border-default).

    +
  • subtle: string

    Subtle border (--border-subtle).

    +
surface: { card: string; elevated: string; page: string }

Background surface colors.

+

Type declaration

  • card: string

    Card background (--bg-card).

    +
  • elevated: string

    Elevated surface, e.g. popovers (--bg-elevated).

    +
  • page: string

    Page background (--bg-page).

    +
text: { muted: string; primary: string; secondary: string }

Text colors.

+

Type declaration

  • muted: string

    Muted text (--text-muted).

    +
  • primary: string

    Primary text (--text-primary).

    +
  • secondary: string

    Secondary text (--text-secondary).

    +
diff --git a/vet/lib/interfaces/src_vite-env.ImportMeta.html b/vet/lib/interfaces/src_vite-env.ImportMeta.html new file mode 100644 index 0000000..9a2ab58 --- /dev/null +++ b/vet/lib/interfaces/src_vite-env.ImportMeta.html @@ -0,0 +1,12 @@ +ImportMeta | vet

Interface ImportMeta

The type of import.meta.

+

If you need to declare that a given property exists on import.meta, +this type may be augmented via interface merging.

+
interface ImportMeta {
    dirname: string;
    env: ImportMetaEnv;
    filename: string;
    glob: ImportGlobFunction;
    hot?: ViteHotContext;
    main: boolean;
    url: string;
    resolve(specifier: string): string;
    resolve(specifier: string, parent?: string | URL): string;
}

Properties

Methods

Properties

dirname: string
filename: string
glob: ImportGlobFunction
hot?: ViteHotContext
main: boolean
url: string

Methods

  • Parameters

    • specifier: string

    Returns string

  • Parameters

    • specifier: string
    • Optionalparent: string | URL

    Returns string

diff --git a/vet/lib/interfaces/src_vite-env.ImportMetaEnv.html b/vet/lib/interfaces/src_vite-env.ImportMetaEnv.html new file mode 100644 index 0000000..204a9b6 --- /dev/null +++ b/vet/lib/interfaces/src_vite-env.ImportMetaEnv.html @@ -0,0 +1,8 @@ +ImportMetaEnv | vet

Interface ImportMetaEnv

interface ImportMetaEnv {
    BASE_URL: string;
    DEV: boolean;
    MODE: string;
    PROD: boolean;
    SSR: boolean;
    VITE_API_BASE_URL: string;
    VITE_AUTH_BASE_URL: string;
    [key: string]: any;
}

Indexable

  • [key: string]: any

Properties

BASE_URL: string
DEV: boolean
MODE: string
PROD: boolean
SSR: boolean
VITE_API_BASE_URL: string
VITE_AUTH_BASE_URL: string
diff --git a/vet/lib/modules/src_Footer.html b/vet/lib/modules/src_Footer.html new file mode 100644 index 0000000..065da89 --- /dev/null +++ b/vet/lib/modules/src_Footer.html @@ -0,0 +1,6 @@ +src/Footer | vet

Module src/Footer

Site footer for the Veterinary Clinic demo app.

+

A fixed bottom AppBar (pinned above the drawer via +zIndex.drawer + 1) with a blurred translucent background and a top +divider, rendering the Copyright line. Rendered once by main.jsx below +the routed content.

+

Functions

default
diff --git a/vet/lib/modules/src_Header.html b/vet/lib/modules/src_Header.html new file mode 100644 index 0000000..8acb1b5 --- /dev/null +++ b/vet/lib/modules/src_Header.html @@ -0,0 +1,6 @@ +src/Header | vet

Module src/Header

Top navigation bar for the Veterinary Clinic demo app.

+

A fixed AppBar with blurred translucent background and bottom divider, +showing the app title/logo and an Admin button. Rendered once by main.jsx +above the routed content; the title navigates to / and the Admin button to +/admin.

+

Functions

default
diff --git a/vet/lib/modules/src_Home.html b/vet/lib/modules/src_Home.html new file mode 100644 index 0000000..d4a0449 --- /dev/null +++ b/vet/lib/modules/src_Home.html @@ -0,0 +1,13 @@ +src/Home | vet

Module src/Home

Landing page for the Veterinary Clinic demo app.

+

Exercises the react-openapi building blocks end-to-end:

+
    +
  • ResourceCard - a grid of every top-level resource with a live record +count (or SSE connection status for streaming resources).
  • +
  • LiveTable - preview of the first 5 records of the first non-streaming +resource.
  • +
  • ApptForm - a hand-crafted appointment form using FormFieldRenderer, +useResource().create() and auto-loaded FK options.
  • +
  • An optional live SseStreamView with a pet selector for a streaming +resource.
  • +
+

Functions

default
diff --git a/vet/lib/modules/src_main.html b/vet/lib/modules/src_main.html new file mode 100644 index 0000000..673bcae --- /dev/null +++ b/vet/lib/modules/src_main.html @@ -0,0 +1,6 @@ +src/main | vet

Module src/main

Application entry point.

+

Creates the React root from #root and mounts the app: AppProvider +(fed by specConfiguration) wraps a BrowserRouter → AppTheme → +Header → routed content (Home at /, Admin at /admin/*) → +Footer.

+
diff --git a/vet/lib/modules/src_openapi-config.html b/vet/lib/modules/src_openapi-config.html new file mode 100644 index 0000000..5513fd9 --- /dev/null +++ b/vet/lib/modules/src_openapi-config.html @@ -0,0 +1,5 @@ +src/openapi-config | vet

Module src/openapi-config

Runtime OpenAPI configuration for the Veterinary Clinic demo.

+

Reads the API base URL from import.meta.env.VITE_API_BASE_URL and points +react-openapi at ${base}/openapi.json, sets the app title, and enables +client-side filtering for the appointments resource.

+

Variables

specConfiguration
diff --git a/vet/lib/modules/src_shared-theme_AppTheme.html b/vet/lib/modules/src_shared-theme_AppTheme.html new file mode 100644 index 0000000..12f20e3 --- /dev/null +++ b/vet/lib/modules/src_shared-theme_AppTheme.html @@ -0,0 +1,9 @@ +src/shared-theme/AppTheme | vet

Module src/shared-theme/AppTheme

App theme provider and color-mode context.

+

Wraps the MUI ThemeProvider with the design tokens (getDesignTokens), +semantic colors (getSemanticColors) and component customizations +(inputsCustomizations, dataDisplayCustomizations, +feedbackCustomizations, navigationCustomizations, +surfacesCustomizations). Exposes a light/dark ColorModeContext and +publishes the semantic colors as CSS custom properties (--bg-page, +--bg-card, --text-primary, ...) for the app subtree.

+

Type Aliases

ColorMode

Variables

ColorModeContext

Functions

default
diff --git a/vet/lib/modules/src_shared-theme_customizations_dataDisplay.html b/vet/lib/modules/src_shared-theme_customizations_dataDisplay.html new file mode 100644 index 0000000..e956c1f --- /dev/null +++ b/vet/lib/modules/src_shared-theme_customizations_dataDisplay.html @@ -0,0 +1,4 @@ +src/shared-theme/customizations/dataDisplay | vet

Module src/shared-theme/customizations/dataDisplay

MUI style overrides for data-display components.

+

Exports dataDisplayCustomizations, a Components<Theme> map applied by +AppTheme, covering lists, chips, table pagination and icons.

+

Variables

dataDisplayCustomizations
diff --git a/vet/lib/modules/src_shared-theme_customizations_feedback.html b/vet/lib/modules/src_shared-theme_customizations_feedback.html new file mode 100644 index 0000000..3d6f321 --- /dev/null +++ b/vet/lib/modules/src_shared-theme_customizations_feedback.html @@ -0,0 +1,4 @@ +src/shared-theme/customizations/feedback | vet

Module src/shared-theme/customizations/feedback

MUI style overrides for feedback components.

+

Exports feedbackCustomizations, a Components<Theme> map applied by +AppTheme, covering alerts, dialogs and linear progress.

+

Variables

feedbackCustomizations
diff --git a/vet/lib/modules/src_shared-theme_customizations_inputs.html b/vet/lib/modules/src_shared-theme_customizations_inputs.html new file mode 100644 index 0000000..fef5594 --- /dev/null +++ b/vet/lib/modules/src_shared-theme_customizations_inputs.html @@ -0,0 +1,5 @@ +src/shared-theme/customizations/inputs | vet

Module src/shared-theme/customizations/inputs

MUI style overrides for form inputs and buttons.

+

Exports inputsCustomizations, a Components<Theme> map applied by +AppTheme, covering buttons, icon buttons, toggles, checkbox, outlined +inputs and form labels with light/dark variants.

+

Variables

inputsCustomizations
diff --git a/vet/lib/modules/src_shared-theme_customizations_navigation.html b/vet/lib/modules/src_shared-theme_customizations_navigation.html new file mode 100644 index 0000000..e68a75c --- /dev/null +++ b/vet/lib/modules/src_shared-theme_customizations_navigation.html @@ -0,0 +1,5 @@ +src/shared-theme/customizations/navigation | vet

Module src/shared-theme/customizations/navigation

MUI style overrides for navigation components.

+

Exports navigationCustomizations, a Components<Theme> map applied by +AppTheme, covering menus, selects, links, drawers, pagination, tabs and +steppers.

+

Variables

navigationCustomizations
diff --git a/vet/lib/modules/src_shared-theme_customizations_surfaces.html b/vet/lib/modules/src_shared-theme_customizations_surfaces.html new file mode 100644 index 0000000..46827ec --- /dev/null +++ b/vet/lib/modules/src_shared-theme_customizations_surfaces.html @@ -0,0 +1,4 @@ +src/shared-theme/customizations/surfaces | vet

Module src/shared-theme/customizations/surfaces

MUI style overrides for surface components.

+

Exports surfacesCustomizations, a Components<Theme> map applied by +AppTheme, covering accordions, paper, cards and card sections.

+

Variables

surfacesCustomizations
diff --git a/vet/lib/modules/src_shared-theme_themeConfig.html b/vet/lib/modules/src_shared-theme_themeConfig.html new file mode 100644 index 0000000..179a21d --- /dev/null +++ b/vet/lib/modules/src_shared-theme_themeConfig.html @@ -0,0 +1,5 @@ +src/shared-theme/themeConfig | vet

Module src/shared-theme/themeConfig

Semantic (mode-aware) color tokens.

+

Adds a semantic slice to the MUI theme (augmenting @mui/material/styles) +with surface/border/text colors, resolved per light/dark mode by +getSemanticColors. AppTheme publishes these as CSS custom properties.

+

Interfaces

SemanticColors

Type Aliases

SemanticColorMode

Functions

getSemanticColors
diff --git a/vet/lib/modules/src_shared-theme_themePrimitives.html b/vet/lib/modules/src_shared-theme_themePrimitives.html new file mode 100644 index 0000000..ca7cb69 --- /dev/null +++ b/vet/lib/modules/src_shared-theme_themePrimitives.html @@ -0,0 +1,6 @@ +src/shared-theme/themePrimitives | vet

Module src/shared-theme/themePrimitives

Base design tokens and palettes for the Veterinary Clinic theme.

+

Defines the raw color ramps (brand, gray, green, orange, red), the +light/dark design tokens (getDesignTokens), and the colorSchemes, +typography, shape and shadows primitives. Also augments MUI's theme +types with the ColorRange, flows and baseShadow extensions.

+

Variables

brand
colorSchemes
gray
green
orange
red
shadows
shape
typography

Functions

getDesignTokens
diff --git a/vet/lib/modules/src_vite-env.html b/vet/lib/modules/src_vite-env.html new file mode 100644 index 0000000..269573b --- /dev/null +++ b/vet/lib/modules/src_vite-env.html @@ -0,0 +1 @@ +src/vite-env | vet

Module src/vite-env

Interfaces

ImportMeta
ImportMetaEnv
diff --git a/vet/lib/types/src_shared-theme_AppTheme.ColorMode.html b/vet/lib/types/src_shared-theme_AppTheme.ColorMode.html new file mode 100644 index 0000000..09da8ba --- /dev/null +++ b/vet/lib/types/src_shared-theme_AppTheme.ColorMode.html @@ -0,0 +1,2 @@ +ColorMode | vet
ColorMode: "light" | "dark"

Color mode of the app theme.

+
diff --git a/vet/lib/types/src_shared-theme_themeConfig.SemanticColorMode.html b/vet/lib/types/src_shared-theme_themeConfig.SemanticColorMode.html new file mode 100644 index 0000000..2070797 --- /dev/null +++ b/vet/lib/types/src_shared-theme_themeConfig.SemanticColorMode.html @@ -0,0 +1,2 @@ +SemanticColorMode | vet
SemanticColorMode: "light" | "dark"

Color mode supported by the semantic tokens.

+
diff --git a/vet/lib/variables/src_openapi-config.specConfiguration.html b/vet/lib/variables/src_openapi-config.specConfiguration.html new file mode 100644 index 0000000..efa1686 --- /dev/null +++ b/vet/lib/variables/src_openapi-config.specConfiguration.html @@ -0,0 +1,8 @@ +specConfiguration | vet

Variable specConfigurationConst

specConfiguration: SpecConfiguration = ...

The SpecConfiguration passed to AppProvider.

+
    +
  • specUrl / baseApiUrl - derived from VITE_API_BASE_URL.
  • +
  • title - "Veterinary Clinic".
  • +
  • resourceConfig.appointments.filterOptions.mode - "client".
  • +
+

getToken is intentionally left commented out; this demo has no auth.

+
diff --git a/vet/lib/variables/src_shared-theme_AppTheme.ColorModeContext.html b/vet/lib/variables/src_shared-theme_AppTheme.ColorModeContext.html new file mode 100644 index 0000000..3f5d17e --- /dev/null +++ b/vet/lib/variables/src_shared-theme_AppTheme.ColorModeContext.html @@ -0,0 +1,2 @@ +ColorModeContext | vet

Variable ColorModeContextConst

ColorModeContext: Context<ColorModeContextValue> = ...

Context giving the current color mode and its setters.

+
diff --git a/vet/lib/variables/src_shared-theme_customizations_dataDisplay.dataDisplayCustomizations.html b/vet/lib/variables/src_shared-theme_customizations_dataDisplay.dataDisplayCustomizations.html new file mode 100644 index 0000000..46c6607 --- /dev/null +++ b/vet/lib/variables/src_shared-theme_customizations_dataDisplay.dataDisplayCustomizations.html @@ -0,0 +1,2 @@ +dataDisplayCustomizations | vet
dataDisplayCustomizations: Components<Theme> = ...

Component overrides for lists, chips, table pagination and icons.

+
diff --git a/vet/lib/variables/src_shared-theme_customizations_feedback.feedbackCustomizations.html b/vet/lib/variables/src_shared-theme_customizations_feedback.feedbackCustomizations.html new file mode 100644 index 0000000..e44a6fa --- /dev/null +++ b/vet/lib/variables/src_shared-theme_customizations_feedback.feedbackCustomizations.html @@ -0,0 +1,2 @@ +feedbackCustomizations | vet
feedbackCustomizations: Components<Theme> = ...

Component overrides for alerts, dialogs and linear progress.

+
diff --git a/vet/lib/variables/src_shared-theme_customizations_inputs.inputsCustomizations.html b/vet/lib/variables/src_shared-theme_customizations_inputs.inputsCustomizations.html new file mode 100644 index 0000000..e721073 --- /dev/null +++ b/vet/lib/variables/src_shared-theme_customizations_inputs.inputsCustomizations.html @@ -0,0 +1,2 @@ +inputsCustomizations | vet
inputsCustomizations: Components<Theme> = ...

Component overrides for buttons, toggles, inputs and labels.

+
diff --git a/vet/lib/variables/src_shared-theme_customizations_navigation.navigationCustomizations.html b/vet/lib/variables/src_shared-theme_customizations_navigation.navigationCustomizations.html new file mode 100644 index 0000000..def87ba --- /dev/null +++ b/vet/lib/variables/src_shared-theme_customizations_navigation.navigationCustomizations.html @@ -0,0 +1,2 @@ +navigationCustomizations | vet
navigationCustomizations: Components<Theme> = ...

Component overrides for menus, selects, links, drawers, pagination and tabs.

+
diff --git a/vet/lib/variables/src_shared-theme_customizations_surfaces.surfacesCustomizations.html b/vet/lib/variables/src_shared-theme_customizations_surfaces.surfacesCustomizations.html new file mode 100644 index 0000000..5c0f5ac --- /dev/null +++ b/vet/lib/variables/src_shared-theme_customizations_surfaces.surfacesCustomizations.html @@ -0,0 +1,2 @@ +surfacesCustomizations | vet
surfacesCustomizations: Components<Theme> = ...

Component overrides for accordions, paper and cards.

+
diff --git a/vet/lib/variables/src_shared-theme_themePrimitives.brand.html b/vet/lib/variables/src_shared-theme_themePrimitives.brand.html new file mode 100644 index 0000000..d187b13 --- /dev/null +++ b/vet/lib/variables/src_shared-theme_themePrimitives.brand.html @@ -0,0 +1,2 @@ +brand | vet
brand: {
    "100": string;
    "200": string;
    "300": string;
    "400": string;
    "50": string;
    "500": string;
    "600": string;
    "700": string;
    "800": string;
    "900": string;
} = ...

Brand blue color ramp (50-900).

+

Type declaration

  • 100: string
  • 200: string
  • 300: string
  • 400: string
  • 50: string
  • 500: string
  • 600: string
  • 700: string
  • 800: string
  • 900: string
diff --git a/vet/lib/variables/src_shared-theme_themePrimitives.colorSchemes.html b/vet/lib/variables/src_shared-theme_themePrimitives.colorSchemes.html new file mode 100644 index 0000000..adfbada --- /dev/null +++ b/vet/lib/variables/src_shared-theme_themePrimitives.colorSchemes.html @@ -0,0 +1,2 @@ +colorSchemes | vet
colorSchemes: {
    dark: {
        palette: {
            action: { hover: string; selected: string };
            background: { default: string; paper: string };
            baseShadow: string;
            divider: string;
            error: { dark: string; light: string; main: string };
            flows: {
                inflows: { primary: string; surface: string; text: string };
                outflows: { primary: string; surface: string; text: string };
            };
            grey: {
                "100": string;
                "200": string;
                "300": string;
                "400": string;
                "50": string;
                "500": string;
                "600": string;
                "700": string;
                "750": string;
                "800": string;
                "850": string;
                "900": string;
            };
            info: { contrastText: string; dark: string; light: string; main: string };
            primary: {
                contrastText: string;
                dark: string;
                light: string;
                main: string;
            };
            success: { dark: string; light: string; main: string };
            text: { primary: string; secondary: string };
            warning: { dark: string; light: string; main: string };
        };
    };
    light: {
        palette: {
            action: { hover: string; selected: string };
            background: { default: string; paper: string };
            baseShadow: string;
            divider: string;
            error: { dark: string; light: string; main: string };
            flows: {
                inflows: { primary: string; surface: string; text: string };
                outflows: { primary: string; surface: string; text: string };
            };
            grey: {
                "100": string;
                "200": string;
                "300": string;
                "400": string;
                "50": string;
                "500": string;
                "600": string;
                "700": string;
                "750": string;
                "800": string;
                "850": string;
                "900": string;
            };
            info: { contrastText: string; dark: string; light: string; main: string };
            primary: {
                contrastText: string;
                dark: string;
                light: string;
                main: string;
            };
            success: { dark: string; light: string; main: string };
            text: { primary: string; secondary: string; warning: string };
            warning: { dark: string; light: string; main: string };
        };
    };
} = ...

Explicit light/dark colorSchemes palette definitions.

+

Type declaration

  • dark: {
        palette: {
            action: { hover: string; selected: string };
            background: { default: string; paper: string };
            baseShadow: string;
            divider: string;
            error: { dark: string; light: string; main: string };
            flows: {
                inflows: { primary: string; surface: string; text: string };
                outflows: { primary: string; surface: string; text: string };
            };
            grey: {
                "100": string;
                "200": string;
                "300": string;
                "400": string;
                "50": string;
                "500": string;
                "600": string;
                "700": string;
                "750": string;
                "800": string;
                "850": string;
                "900": string;
            };
            info: { contrastText: string; dark: string; light: string; main: string };
            primary: {
                contrastText: string;
                dark: string;
                light: string;
                main: string;
            };
            success: { dark: string; light: string; main: string };
            text: { primary: string; secondary: string };
            warning: { dark: string; light: string; main: string };
        };
    }
  • light: {
        palette: {
            action: { hover: string; selected: string };
            background: { default: string; paper: string };
            baseShadow: string;
            divider: string;
            error: { dark: string; light: string; main: string };
            flows: {
                inflows: { primary: string; surface: string; text: string };
                outflows: { primary: string; surface: string; text: string };
            };
            grey: {
                "100": string;
                "200": string;
                "300": string;
                "400": string;
                "50": string;
                "500": string;
                "600": string;
                "700": string;
                "750": string;
                "800": string;
                "850": string;
                "900": string;
            };
            info: { contrastText: string; dark: string; light: string; main: string };
            primary: {
                contrastText: string;
                dark: string;
                light: string;
                main: string;
            };
            success: { dark: string; light: string; main: string };
            text: { primary: string; secondary: string; warning: string };
            warning: { dark: string; light: string; main: string };
        };
    }
diff --git a/vet/lib/variables/src_shared-theme_themePrimitives.gray.html b/vet/lib/variables/src_shared-theme_themePrimitives.gray.html new file mode 100644 index 0000000..96907ea --- /dev/null +++ b/vet/lib/variables/src_shared-theme_themePrimitives.gray.html @@ -0,0 +1,2 @@ +gray | vet
gray: {
    "100": string;
    "200": string;
    "300": string;
    "400": string;
    "50": string;
    "500": string;
    "600": string;
    "700": string;
    "750": string;
    "800": string;
    "850": string;
    "900": string;
} = ...

Neutral gray color ramp (50-900, plus 750/850).

+

Type declaration

  • 100: string
  • 200: string
  • 300: string
  • 400: string
  • 50: string
  • 500: string
  • 600: string
  • 700: string
  • 750: string
  • 800: string
  • 850: string
  • 900: string
diff --git a/vet/lib/variables/src_shared-theme_themePrimitives.green.html b/vet/lib/variables/src_shared-theme_themePrimitives.green.html new file mode 100644 index 0000000..873dbee --- /dev/null +++ b/vet/lib/variables/src_shared-theme_themePrimitives.green.html @@ -0,0 +1,2 @@ +green | vet
green: {
    "100": string;
    "200": string;
    "300": string;
    "400": string;
    "50": string;
    "500": string;
    "600": string;
    "700": string;
    "800": string;
    "900": string;
} = ...

Green (success) color ramp (50-900).

+

Type declaration

  • 100: string
  • 200: string
  • 300: string
  • 400: string
  • 50: string
  • 500: string
  • 600: string
  • 700: string
  • 800: string
  • 900: string
diff --git a/vet/lib/variables/src_shared-theme_themePrimitives.orange.html b/vet/lib/variables/src_shared-theme_themePrimitives.orange.html new file mode 100644 index 0000000..2b1d29f --- /dev/null +++ b/vet/lib/variables/src_shared-theme_themePrimitives.orange.html @@ -0,0 +1,2 @@ +orange | vet
orange: {
    "100": string;
    "200": string;
    "300": string;
    "400": string;
    "50": string;
    "500": string;
    "600": string;
    "700": string;
    "800": string;
    "900": string;
} = ...

Orange (warning) color ramp (50-900).

+

Type declaration

  • 100: string
  • 200: string
  • 300: string
  • 400: string
  • 50: string
  • 500: string
  • 600: string
  • 700: string
  • 800: string
  • 900: string
diff --git a/vet/lib/variables/src_shared-theme_themePrimitives.red.html b/vet/lib/variables/src_shared-theme_themePrimitives.red.html new file mode 100644 index 0000000..b8a1565 --- /dev/null +++ b/vet/lib/variables/src_shared-theme_themePrimitives.red.html @@ -0,0 +1,2 @@ +red | vet
red: {
    "100": string;
    "200": string;
    "300": string;
    "400": string;
    "50": string;
    "500": string;
    "600": string;
    "700": string;
    "800": string;
    "900": string;
} = ...

Red (error) color ramp (50-900).

+

Type declaration

  • 100: string
  • 200: string
  • 300: string
  • 400: string
  • 50: string
  • 500: string
  • 600: string
  • 700: string
  • 800: string
  • 900: string
diff --git a/vet/lib/variables/src_shared-theme_themePrimitives.shadows.html b/vet/lib/variables/src_shared-theme_themePrimitives.shadows.html new file mode 100644 index 0000000..559ace1 --- /dev/null +++ b/vet/lib/variables/src_shared-theme_themePrimitives.shadows.html @@ -0,0 +1,2 @@ +shadows | vet
shadows: Shadows = defaultShadows

Shadow scale (index 0 none, index 1 the template baseShadow).

+
diff --git a/vet/lib/variables/src_shared-theme_themePrimitives.shape.html b/vet/lib/variables/src_shared-theme_themePrimitives.shape.html new file mode 100644 index 0000000..1a00986 --- /dev/null +++ b/vet/lib/variables/src_shared-theme_themePrimitives.shape.html @@ -0,0 +1,2 @@ +shape | vet
shape: { borderRadius: number } = ...

Shape tokens (global border radius).

+

Type declaration

  • borderRadius: number
diff --git a/vet/lib/variables/src_shared-theme_themePrimitives.typography.html b/vet/lib/variables/src_shared-theme_themePrimitives.typography.html new file mode 100644 index 0000000..137f567 --- /dev/null +++ b/vet/lib/variables/src_shared-theme_themePrimitives.typography.html @@ -0,0 +1,2 @@ +typography | vet
typography: {
    body1: { fontSize: string };
    body2: { fontSize: string; fontWeight: number };
    caption: { fontSize: string; fontWeight: number };
    fontFamily: string;
    h1: {
        fontSize: string;
        fontWeight: number;
        letterSpacing: number;
        lineHeight: number;
    };
    h2: { fontSize: string; fontWeight: number; lineHeight: number };
    h3: { fontSize: string; lineHeight: number };
    h4: { fontSize: string; fontWeight: number; lineHeight: number };
    h5: { fontSize: string; fontWeight: number };
    h6: { fontSize: string; fontWeight: number };
    subtitle1: { fontSize: string };
    subtitle2: { fontSize: string; fontWeight: number };
} = ...

Typography scale (Inter) used by the theme.

+

Type declaration

  • body1: { fontSize: string }
  • body2: { fontSize: string; fontWeight: number }
  • caption: { fontSize: string; fontWeight: number }
  • fontFamily: string
  • h1: {
        fontSize: string;
        fontWeight: number;
        letterSpacing: number;
        lineHeight: number;
    }
  • h2: { fontSize: string; fontWeight: number; lineHeight: number }
  • h3: { fontSize: string; lineHeight: number }
  • h4: { fontSize: string; fontWeight: number; lineHeight: number }
  • h5: { fontSize: string; fontWeight: number }
  • h6: { fontSize: string; fontWeight: number }
  • subtitle1: { fontSize: string }
  • subtitle2: { fontSize: string; fontWeight: number }
diff --git a/vet/mcp/index.json b/vet/mcp/index.json new file mode 100644 index 0000000..1defb38 --- /dev/null +++ b/vet/mcp/index.json @@ -0,0 +1,6 @@ +{ + "project": "vet", + "type": "docforge-model", + "modules_count": 14, + "source": "doc-weaver" +} diff --git a/vet/mcp/modules/Footer.json b/vet/mcp/modules/Footer.json new file mode 100644 index 0000000..e10b04c --- /dev/null +++ b/vet/mcp/modules/Footer.json @@ -0,0 +1,16 @@ +{ + "module": "Footer", + "content": { + "path": "Footer", + "docstring": "Site footer for the Veterinary Clinic demo app.\r\n\r\nA fixed bottom `AppBar` (pinned above the drawer via\r\n`zIndex.drawer + 1`) with a blurred translucent background and a top\r\ndivider, rendering the `Copyright` line. Rendered once by `main.jsx` below\r\nthe routed content.", + "objects": { + "Footer": { + "name": "Footer", + "kind": "component", + "path": "Footer.Footer", + "signature": "default(): React.JSX.Element", + "docstring": "Fixed bottom app bar showing the site copyright.\n\n**Returns:**\n\nThe footer `AppBar` element." + } + } + } +} diff --git a/vet/mcp/modules/Header.json b/vet/mcp/modules/Header.json new file mode 100644 index 0000000..bd8a50b --- /dev/null +++ b/vet/mcp/modules/Header.json @@ -0,0 +1,16 @@ +{ + "module": "Header", + "content": { + "path": "Header", + "docstring": "Top navigation bar for the Veterinary Clinic demo app.\r\n\r\nA fixed `AppBar` with blurred translucent background and bottom divider,\r\nshowing the app title/logo and an Admin button. Rendered once by `main.jsx`\r\nabove the routed content; the title navigates to `/` and the Admin button to\r\n`/admin`.", + "objects": { + "Header": { + "name": "Header", + "kind": "component", + "path": "Header.Header", + "signature": "default(): React.JSX.Element", + "docstring": "Fixed top app bar with the title/logo and an Admin button.\r\n\r\nUses `useNavigate`, so it must be rendered inside a router. Clicking the\r\ntitle navigates to `/`; the Admin button navigates to `/admin`.\n\n**Returns:**\n\nThe header `AppBar` element." + } + } + } +} diff --git a/vet/mcp/modules/Home.json b/vet/mcp/modules/Home.json new file mode 100644 index 0000000..1a1c60f --- /dev/null +++ b/vet/mcp/modules/Home.json @@ -0,0 +1,16 @@ +{ + "module": "Home", + "content": { + "path": "Home", + "docstring": "Landing page for the Veterinary Clinic demo app.\r\n\r\nExercises the `react-openapi` building blocks end-to-end:\r\n- `ResourceCard` - a grid of every top-level resource with a live record\r\n count (or SSE connection status for streaming resources).\r\n- `LiveTable` - preview of the first 5 records of the first non-streaming\r\n resource.\r\n- `ApptForm` - a hand-crafted appointment form using `FormFieldRenderer`,\r\n `useResource().create()` and auto-loaded FK options.\r\n- An optional live `SseStreamView` with a pet selector for a streaming\r\n resource.", + "objects": { + "Home": { + "name": "Home", + "kind": "component", + "path": "Home.Home", + "signature": "default(): React.JSX.Element", + "docstring": "Render the demo landing page: resource grid, live preview, appointment form\r\nand (when present) a live SSE stream.\n\n**Returns:**\n\nThe page container, or a \"no resources\" notice when the spec\r\nexposes none." + } + } + } +} diff --git a/vet/mcp/modules/main.json b/vet/mcp/modules/main.json new file mode 100644 index 0000000..d6672bb --- /dev/null +++ b/vet/mcp/modules/main.json @@ -0,0 +1,8 @@ +{ + "module": "main", + "content": { + "path": "main", + "docstring": "Application entry point.\r\n\r\nCreates the React root from `#root` and mounts the app: `AppProvider`\r\n(fed by `specConfiguration`) wraps a `BrowserRouter` → `AppTheme` →\r\n`Header` → routed content (`Home` at `/`, `Admin` at `/admin/*`) →\r\n`Footer`.", + "objects": {} + } +} diff --git a/vet/mcp/modules/openapi-config.json b/vet/mcp/modules/openapi-config.json new file mode 100644 index 0000000..c82d424 --- /dev/null +++ b/vet/mcp/modules/openapi-config.json @@ -0,0 +1,16 @@ +{ + "module": "openapi-config", + "content": { + "path": "openapi-config", + "docstring": "Runtime OpenAPI configuration for the Veterinary Clinic demo.\r\n\r\nReads the API base URL from `import.meta.env.VITE_API_BASE_URL` and points\r\n`react-openapi` at `${base}/openapi.json`, sets the app title, and enables\r\nclient-side filtering for the `appointments` resource.", + "objects": { + "specConfiguration": { + "name": "specConfiguration", + "kind": "variable", + "path": "openapi-config.specConfiguration", + "signature": "specConfiguration: SpecConfiguration", + "docstring": "The `SpecConfiguration` passed to `AppProvider`.\r\n\r\n- `specUrl` / `baseApiUrl` - derived from `VITE_API_BASE_URL`.\r\n- `title` - \"Veterinary Clinic\".\r\n- `resourceConfig.appointments.filterOptions.mode` - `\"client\"`.\r\n\r\n`getToken` is intentionally left commented out; this demo has no auth." + } + } + } +} diff --git a/vet/mcp/modules/shared-theme.AppTheme.json b/vet/mcp/modules/shared-theme.AppTheme.json new file mode 100644 index 0000000..6977a0e --- /dev/null +++ b/vet/mcp/modules/shared-theme.AppTheme.json @@ -0,0 +1,30 @@ +{ + "module": "shared-theme.AppTheme", + "content": { + "path": "shared-theme.AppTheme", + "docstring": "App theme provider and color-mode context.\r\n\r\nWraps the MUI `ThemeProvider` with the design tokens (`getDesignTokens`),\r\nsemantic colors (`getSemanticColors`) and component customizations\r\n(`inputsCustomizations`, `dataDisplayCustomizations`,\r\n`feedbackCustomizations`, `navigationCustomizations`,\r\n`surfacesCustomizations`). Exposes a light/dark `ColorModeContext` and\r\npublishes the semantic colors as CSS custom properties (`--bg-page`,\r\n`--bg-card`, `--text-primary`, ...) for the app subtree.", + "objects": { + "ColorMode": { + "name": "ColorMode", + "kind": "type-alias", + "path": "shared-theme.AppTheme.ColorMode", + "signature": "ColorMode: \"light\" | \"dark\"", + "docstring": "Color mode of the app theme." + }, + "ColorModeContext": { + "name": "ColorModeContext", + "kind": "component", + "path": "shared-theme.AppTheme.ColorModeContext", + "signature": "ColorModeContext: React.Context", + "docstring": "Context giving the current color mode and its setters." + }, + "AppTheme": { + "name": "AppTheme", + "kind": "component", + "path": "shared-theme.AppTheme.AppTheme", + "signature": "default(__namedParameters: AppThemeProps): React.JSX.Element", + "docstring": "Provide the MUI theme, color-mode context and CSS variables to `children`.\r\n\r\nBuilds the theme from `getDesignTokens(mode)` + `getSemanticColors(mode)` +\r\nthe component customizations, and re-creates it whenever the mode changes.\r\nAlso sets `--bg-page`, `--bg-card`, `--bg-elevated`, `--border-default`,\r\n`--border-subtle`, `--text-primary`, `--text-secondary` and `--text-muted`\r\non a wrapper `Box`.\r\n\r\nProps: `children` and `defaultMode` (see `AppThemeProps`).\n\n**Example:**\n\n```tsx\r\n\r\n \r\n \r\n\r\n```" + } + } + } +} diff --git a/vet/mcp/modules/shared-theme.customizations.dataDisplay.json b/vet/mcp/modules/shared-theme.customizations.dataDisplay.json new file mode 100644 index 0000000..3201b5a --- /dev/null +++ b/vet/mcp/modules/shared-theme.customizations.dataDisplay.json @@ -0,0 +1,16 @@ +{ + "module": "shared-theme.customizations.dataDisplay", + "content": { + "path": "shared-theme.customizations.dataDisplay", + "docstring": "MUI style overrides for data-display components.\n\nExports `dataDisplayCustomizations`, a `Components` map applied by\n`AppTheme`, covering lists, chips, table pagination and icons.", + "objects": { + "dataDisplayCustomizations": { + "name": "dataDisplayCustomizations", + "kind": "variable", + "path": "shared-theme.customizations.dataDisplay.dataDisplayCustomizations", + "signature": "dataDisplayCustomizations: Components", + "docstring": "Component overrides for lists, chips, table pagination and icons." + } + } + } +} diff --git a/vet/mcp/modules/shared-theme.customizations.feedback.json b/vet/mcp/modules/shared-theme.customizations.feedback.json new file mode 100644 index 0000000..72be1b1 --- /dev/null +++ b/vet/mcp/modules/shared-theme.customizations.feedback.json @@ -0,0 +1,16 @@ +{ + "module": "shared-theme.customizations.feedback", + "content": { + "path": "shared-theme.customizations.feedback", + "docstring": "MUI style overrides for feedback components.\r\n\r\nExports `feedbackCustomizations`, a `Components` map applied by\r\n`AppTheme`, covering alerts, dialogs and linear progress.", + "objects": { + "feedbackCustomizations": { + "name": "feedbackCustomizations", + "kind": "variable", + "path": "shared-theme.customizations.feedback.feedbackCustomizations", + "signature": "feedbackCustomizations: Components", + "docstring": "Component overrides for alerts, dialogs and linear progress." + } + } + } +} diff --git a/vet/mcp/modules/shared-theme.customizations.inputs.json b/vet/mcp/modules/shared-theme.customizations.inputs.json new file mode 100644 index 0000000..c767f05 --- /dev/null +++ b/vet/mcp/modules/shared-theme.customizations.inputs.json @@ -0,0 +1,16 @@ +{ + "module": "shared-theme.customizations.inputs", + "content": { + "path": "shared-theme.customizations.inputs", + "docstring": "MUI style overrides for form inputs and buttons.\r\n\r\nExports `inputsCustomizations`, a `Components` map applied by\r\n`AppTheme`, covering buttons, icon buttons, toggles, checkbox, outlined\r\ninputs and form labels with light/dark variants.", + "objects": { + "inputsCustomizations": { + "name": "inputsCustomizations", + "kind": "variable", + "path": "shared-theme.customizations.inputs.inputsCustomizations", + "signature": "inputsCustomizations: Components", + "docstring": "Component overrides for buttons, toggles, inputs and labels." + } + } + } +} diff --git a/vet/mcp/modules/shared-theme.customizations.navigation.json b/vet/mcp/modules/shared-theme.customizations.navigation.json new file mode 100644 index 0000000..5fe48e2 --- /dev/null +++ b/vet/mcp/modules/shared-theme.customizations.navigation.json @@ -0,0 +1,16 @@ +{ + "module": "shared-theme.customizations.navigation", + "content": { + "path": "shared-theme.customizations.navigation", + "docstring": "MUI style overrides for navigation components.\r\n\r\nExports `navigationCustomizations`, a `Components` map applied by\r\n`AppTheme`, covering menus, selects, links, drawers, pagination, tabs and\r\nsteppers.", + "objects": { + "navigationCustomizations": { + "name": "navigationCustomizations", + "kind": "variable", + "path": "shared-theme.customizations.navigation.navigationCustomizations", + "signature": "navigationCustomizations: Components", + "docstring": "Component overrides for menus, selects, links, drawers, pagination and tabs." + } + } + } +} diff --git a/vet/mcp/modules/shared-theme.customizations.surfaces.json b/vet/mcp/modules/shared-theme.customizations.surfaces.json new file mode 100644 index 0000000..fd0d2d7 --- /dev/null +++ b/vet/mcp/modules/shared-theme.customizations.surfaces.json @@ -0,0 +1,16 @@ +{ + "module": "shared-theme.customizations.surfaces", + "content": { + "path": "shared-theme.customizations.surfaces", + "docstring": "MUI style overrides for surface components.\r\n\r\nExports `surfacesCustomizations`, a `Components` map applied by\r\n`AppTheme`, covering accordions, paper, cards and card sections.", + "objects": { + "surfacesCustomizations": { + "name": "surfacesCustomizations", + "kind": "variable", + "path": "shared-theme.customizations.surfaces.surfacesCustomizations", + "signature": "surfacesCustomizations: Components", + "docstring": "Component overrides for accordions, paper and cards." + } + } + } +} diff --git a/vet/mcp/modules/shared-theme.themeConfig.json b/vet/mcp/modules/shared-theme.themeConfig.json new file mode 100644 index 0000000..dbfdf3d --- /dev/null +++ b/vet/mcp/modules/shared-theme.themeConfig.json @@ -0,0 +1,53 @@ +{ + "module": "shared-theme.themeConfig", + "content": { + "path": "shared-theme.themeConfig", + "docstring": "Semantic (mode-aware) color tokens.\r\n\r\nAdds a `semantic` slice to the MUI theme (augmenting `@mui/material/styles`)\r\nwith surface/border/text colors, resolved per light/dark mode by\r\n`getSemanticColors`. `AppTheme` publishes these as CSS custom properties.", + "objects": { + "SemanticColors": { + "name": "SemanticColors", + "kind": "interface", + "path": "shared-theme.themeConfig.SemanticColors", + "signature": "SemanticColors", + "docstring": "Mode-aware semantic color groups attached to the MUI theme as\r\n`theme.semantic` and exposed as CSS custom properties by `AppTheme`.", + "members": { + "border": { + "name": "border", + "kind": "property", + "path": "shared-theme.themeConfig.SemanticColors.border", + "signature": "border: { default: string; subtle: string }", + "docstring": "Border colors." + }, + "surface": { + "name": "surface", + "kind": "property", + "path": "shared-theme.themeConfig.SemanticColors.surface", + "signature": "surface: { card: string; elevated: string; page: string }", + "docstring": "Background surface colors." + }, + "text": { + "name": "text", + "kind": "property", + "path": "shared-theme.themeConfig.SemanticColors.text", + "signature": "text: { muted: string; primary: string; secondary: string }", + "docstring": "Text colors." + } + } + }, + "SemanticColorMode": { + "name": "SemanticColorMode", + "kind": "type-alias", + "path": "shared-theme.themeConfig.SemanticColorMode", + "signature": "SemanticColorMode: \"light\" | \"dark\"", + "docstring": "Color mode supported by the semantic tokens." + }, + "getSemanticColors": { + "name": "getSemanticColors", + "kind": "function", + "path": "shared-theme.themeConfig.getSemanticColors", + "signature": "getSemanticColors(mode: SemanticColorMode): SemanticColors", + "docstring": "Resolve the semantic color groups for a color mode.\r\n\r\nDark mode uses fixed HSL values; light mode derives borders/text from the\r\n`gray` ramp (with `alpha`).\n\n**Parameters:**\n\n- `mode` — `\"light\"` or `\"dark\"`.\n\n**Returns:**\n\nThe `SemanticColors` for that mode.\n\n**Example:**\n\n```ts\r\nconst colors = getSemanticColors(\"dark\");\r\ncolors.surface.page; // \"hsl(0, 0%, 9%)\"\r\n```" + } + } + } +} diff --git a/vet/mcp/modules/shared-theme.themePrimitives.json b/vet/mcp/modules/shared-theme.themePrimitives.json new file mode 100644 index 0000000..50dfcf2 --- /dev/null +++ b/vet/mcp/modules/shared-theme.themePrimitives.json @@ -0,0 +1,79 @@ +{ + "module": "shared-theme.themePrimitives", + "content": { + "path": "shared-theme.themePrimitives", + "docstring": "Base design tokens and palettes for the Veterinary Clinic theme.\r\n\r\nDefines the raw color ramps (`brand`, `gray`, `green`, `orange`, `red`), the\r\nlight/dark design tokens (`getDesignTokens`), and the `colorSchemes`,\r\n`typography`, `shape` and `shadows` primitives. Also augments MUI's theme\r\ntypes with the `ColorRange`, `flows` and `baseShadow` extensions.", + "objects": { + "brand": { + "name": "brand", + "kind": "variable", + "path": "shared-theme.themePrimitives.brand", + "signature": "brand: { 100: string; 200: string; 300: string; 400: string; 50: string; 500: string; 600: string; 700: string; 800: string; 900: string }", + "docstring": "Brand blue color ramp (50-900)." + }, + "colorSchemes": { + "name": "colorSchemes", + "kind": "variable", + "path": "shared-theme.themePrimitives.colorSchemes", + "signature": "colorSchemes: { dark: { palette: { action: { hover: string; selected: string }; background: { default: string; paper: string }; baseShadow: string; divider: string; error: { dark: string; light: string; main: string }; flows: { inflows: { primary: string; surface: string; text: string }; outflows: { primary: string; surface: string; text: string } }; grey: { 100: string; 200: string; 300: string; 400: string; 50: string; 500: string; 600: string; 700: string; 750: string; 800: string; 850: string; 900: string }; info: { contrastText: string; dark: string; light: string; main: string }; primary: { contrastText: string; dark: string; light: string; main: string }; success: { dark: string; light: string; main: string }; text: { primary: string; secondary: string }; warning: { dark: string; light: string; main: string } } }; light: { palette: { action: { hover: string; selected: string }; background: { default: string; paper: string }; baseShadow: string; divider: string; error: { dark: string; light: string; main: string }; flows: { inflows: { primary: string; surface: string; text: string }; outflows: { primary: string; surface: string; text: string } }; grey: { 100: string; 200: string; 300: string; 400: string; 50: string; 500: string; 600: string; 700: string; 750: string; 800: string; 850: string; 900: string }; info: { contrastText: string; dark: string; light: string; main: string }; primary: { contrastText: string; dark: string; light: string; main: string }; success: { dark: string; light: string; main: string }; text: { primary: string; secondary: string; warning: string }; warning: { dark: string; light: string; main: string } } } }", + "docstring": "Explicit light/dark `colorSchemes` palette definitions." + }, + "gray": { + "name": "gray", + "kind": "variable", + "path": "shared-theme.themePrimitives.gray", + "signature": "gray: { 100: string; 200: string; 300: string; 400: string; 50: string; 500: string; 600: string; 700: string; 750: string; 800: string; 850: string; 900: string }", + "docstring": "Neutral gray color ramp (50-900, plus 750/850)." + }, + "green": { + "name": "green", + "kind": "variable", + "path": "shared-theme.themePrimitives.green", + "signature": "green: { 100: string; 200: string; 300: string; 400: string; 50: string; 500: string; 600: string; 700: string; 800: string; 900: string }", + "docstring": "Green (success) color ramp (50-900)." + }, + "orange": { + "name": "orange", + "kind": "variable", + "path": "shared-theme.themePrimitives.orange", + "signature": "orange: { 100: string; 200: string; 300: string; 400: string; 50: string; 500: string; 600: string; 700: string; 800: string; 900: string }", + "docstring": "Orange (warning) color ramp (50-900)." + }, + "red": { + "name": "red", + "kind": "variable", + "path": "shared-theme.themePrimitives.red", + "signature": "red: { 100: string; 200: string; 300: string; 400: string; 50: string; 500: string; 600: string; 700: string; 800: string; 900: string }", + "docstring": "Red (error) color ramp (50-900)." + }, + "shadows": { + "name": "shadows", + "kind": "variable", + "path": "shared-theme.themePrimitives.shadows", + "signature": "shadows: Shadows", + "docstring": "Shadow scale (index 0 `none`, index 1 the template `baseShadow`)." + }, + "shape": { + "name": "shape", + "kind": "variable", + "path": "shared-theme.themePrimitives.shape", + "signature": "shape: { borderRadius: number }", + "docstring": "Shape tokens (global border radius)." + }, + "typography": { + "name": "typography", + "kind": "variable", + "path": "shared-theme.themePrimitives.typography", + "signature": "typography: { body1: { fontSize: string }; body2: { fontSize: string; fontWeight: number }; caption: { fontSize: string; fontWeight: number }; fontFamily: string; h1: { fontSize: string; fontWeight: number; letterSpacing: number; lineHeight: number }; h2: { fontSize: string; fontWeight: number; lineHeight: number }; h3: { fontSize: string; lineHeight: number }; h4: { fontSize: string; fontWeight: number; lineHeight: number }; h5: { fontSize: string; fontWeight: number }; h6: { fontSize: string; fontWeight: number }; subtitle1: { fontSize: string }; subtitle2: { fontSize: string; fontWeight: number } }", + "docstring": "Typography scale (Inter) used by the theme." + }, + "getDesignTokens": { + "name": "getDesignTokens", + "kind": "function", + "path": "shared-theme.themePrimitives.getDesignTokens", + "signature": "getDesignTokens(mode: PaletteMode): { palette: { action: { hover: string; selected: string }; background: { default: string; paper: string }; divider: string; error: { dark: string; light: string; main: string }; flows: { inflows: { primary: string; surface: string; text: string }; outflows: { primary: string; surface: string; text: string } }; grey: { 100: string; 200: string; 300: string; 400: string; 50: string; 500: string; 600: string; 700: string; 750: string; 800: string; 850: string; 900: string }; info: { contrastText: string; dark: string; light: string; main: string }; mode: PaletteMode; primary: { contrastText: string; dark: string; light: string; main: string }; success: { dark: string; light: string; main: string }; text: { primary: string; secondary: string; warning: string }; warning: { dark: string; light: string; main: string } }; shadows: Shadows; shape: { borderRadius: number }; typography: { body1: { fontSize: string }; body2: { fontSize: string; fontWeight: number }; caption: { fontSize: string; fontWeight: number }; fontFamily: string; h1: { fontSize: string; fontWeight: number; letterSpacing: number; lineHeight: number }; h2: { fontSize: string; fontWeight: number; lineHeight: number }; h3: { fontSize: string; lineHeight: number }; h4: { fontSize: string; fontWeight: number; lineHeight: number }; h5: { fontSize: string; fontWeight: number }; h6: { fontSize: string; fontWeight: number }; subtitle1: { fontSize: string }; subtitle2: { fontSize: string; fontWeight: number } } }", + "docstring": "Build the MUI design tokens (palette, typography, shape, shadows) for a mode.\r\n\r\nLight and dark palettes share the ramps but override specific slots in dark\r\nmode. Also sets `shadows[1]` (the \"baseShadow\") per mode. The returned object\r\nis spread into `createTheme` by `AppTheme`.\n\n**Parameters:**\n\n- `mode` — `\"light\"` or `\"dark\"`.\n\n**Returns:**\n\nA MUI `ThemeOptions`-shaped object (palette, typography, shape,\r\nshadows)." + } + } + } +} diff --git a/vet/mcp/modules/src_vite-env.json b/vet/mcp/modules/src_vite-env.json new file mode 100644 index 0000000..9ccd9f7 --- /dev/null +++ b/vet/mcp/modules/src_vite-env.json @@ -0,0 +1,132 @@ +{ + "module": "src_vite-env", + "content": { + "path": "src_vite-env", + "docstring": "", + "objects": { + "ImportMeta": { + "name": "ImportMeta", + "kind": "interface", + "path": "src_vite-env.ImportMeta", + "signature": "ImportMeta", + "docstring": "The type of `import.meta`.\n\nIf you need to declare that a given property exists on `import.meta`,\nthis type may be augmented via interface merging.", + "members": { + "dirname": { + "name": "dirname", + "kind": "property", + "path": "src_vite-env.ImportMeta.dirname", + "signature": "dirname: string", + "docstring": "" + }, + "env": { + "name": "env", + "kind": "property", + "path": "src_vite-env.ImportMeta.env", + "signature": "env: ImportMetaEnv", + "docstring": "" + }, + "filename": { + "name": "filename", + "kind": "property", + "path": "src_vite-env.ImportMeta.filename", + "signature": "filename: string", + "docstring": "" + }, + "glob": { + "name": "glob", + "kind": "property", + "path": "src_vite-env.ImportMeta.glob", + "signature": "glob: ImportGlobFunction", + "docstring": "" + }, + "hot": { + "name": "hot", + "kind": "property", + "path": "src_vite-env.ImportMeta.hot", + "signature": "hot: ViteHotContext", + "docstring": "" + }, + "main": { + "name": "main", + "kind": "property", + "path": "src_vite-env.ImportMeta.main", + "signature": "main: boolean", + "docstring": "" + }, + "url": { + "name": "url", + "kind": "property", + "path": "src_vite-env.ImportMeta.url", + "signature": "url: string", + "docstring": "" + }, + "resolve": { + "name": "resolve", + "kind": "method", + "path": "src_vite-env.ImportMeta.resolve", + "signature": "resolve(specifier: string): string | resolve(specifier: string, parent?: string | \"node:url\".URL): string", + "docstring": "" + } + } + }, + "ImportMetaEnv": { + "name": "ImportMetaEnv", + "kind": "interface", + "path": "src_vite-env.ImportMetaEnv", + "signature": "ImportMetaEnv", + "docstring": "", + "members": { + "BASE_URL": { + "name": "BASE_URL", + "kind": "property", + "path": "src_vite-env.ImportMetaEnv.BASE_URL", + "signature": "BASE_URL: string", + "docstring": "" + }, + "DEV": { + "name": "DEV", + "kind": "property", + "path": "src_vite-env.ImportMetaEnv.DEV", + "signature": "DEV: boolean", + "docstring": "" + }, + "MODE": { + "name": "MODE", + "kind": "property", + "path": "src_vite-env.ImportMetaEnv.MODE", + "signature": "MODE: string", + "docstring": "" + }, + "PROD": { + "name": "PROD", + "kind": "property", + "path": "src_vite-env.ImportMetaEnv.PROD", + "signature": "PROD: boolean", + "docstring": "" + }, + "SSR": { + "name": "SSR", + "kind": "property", + "path": "src_vite-env.ImportMetaEnv.SSR", + "signature": "SSR: boolean", + "docstring": "" + }, + "VITE_API_BASE_URL": { + "name": "VITE_API_BASE_URL", + "kind": "property", + "path": "src_vite-env.ImportMetaEnv.VITE_API_BASE_URL", + "signature": "VITE_API_BASE_URL: string", + "docstring": "" + }, + "VITE_AUTH_BASE_URL": { + "name": "VITE_AUTH_BASE_URL", + "kind": "property", + "path": "src_vite-env.ImportMetaEnv.VITE_AUTH_BASE_URL", + "signature": "VITE_AUTH_BASE_URL: string", + "docstring": "" + } + } + } + } + } +} diff --git a/vet/mcp/nav.json b/vet/mcp/nav.json new file mode 100644 index 0000000..e3ab1aa --- /dev/null +++ b/vet/mcp/nav.json @@ -0,0 +1,58 @@ +[ + { + "module": "Footer", + "resource": "docs://modules/Footer" + }, + { + "module": "Header", + "resource": "docs://modules/Header" + }, + { + "module": "Home", + "resource": "docs://modules/Home" + }, + { + "module": "main", + "resource": "docs://modules/main" + }, + { + "module": "openapi-config", + "resource": "docs://modules/openapi-config" + }, + { + "module": "shared-theme.AppTheme", + "resource": "docs://modules/shared-theme.AppTheme" + }, + { + "module": "shared-theme.customizations.dataDisplay", + "resource": "docs://modules/shared-theme.customizations.dataDisplay" + }, + { + "module": "shared-theme.customizations.feedback", + "resource": "docs://modules/shared-theme.customizations.feedback" + }, + { + "module": "shared-theme.customizations.inputs", + "resource": "docs://modules/shared-theme.customizations.inputs" + }, + { + "module": "shared-theme.customizations.navigation", + "resource": "docs://modules/shared-theme.customizations.navigation" + }, + { + "module": "shared-theme.customizations.surfaces", + "resource": "docs://modules/shared-theme.customizations.surfaces" + }, + { + "module": "shared-theme.themeConfig", + "resource": "docs://modules/shared-theme.themeConfig" + }, + { + "module": "shared-theme.themePrimitives", + "resource": "docs://modules/shared-theme.themePrimitives" + }, + { + "module": "src_vite-env", + "resource": "docs://modules/src_vite-env" + } +]