diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/.dockerignore b/ai/gen-ai-agents/oci-enterprise-ai-chat/.dockerignore new file mode 100644 index 000000000..fea2fde73 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/.dockerignore @@ -0,0 +1,6 @@ +node_modules +.next/cache +.git +docs +*.md +.env* diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/LICENSE b/ai/gen-ai-agents/oci-enterprise-ai-chat/LICENSE new file mode 100644 index 000000000..bb3854562 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/LICENSE @@ -0,0 +1,36 @@ +Copyright (c) 2026 Oracle and/or its affiliates. + +The Universal Permissive License (UPL), Version 1.0 + +Subject to the condition set forth below, permission is hereby granted to any +person obtaining a copy of this software, associated documentation and/or data +(collectively the "Software"), free of charge and under any and all copyright +rights in the Software, and any and all patent rights owned or freely +licensable by each licensor hereunder covering either (i) the unmodified +Software as contributed to or provided by such licensor, or (ii) the Larger +Works (as defined below), to deal in both + +(a) the Software, and +(b) any piece of software and/or hardware listed in the lrgrwrks.txt file if +one is included with the Software (each a "Larger Work" to which the Software +is contributed by such licensors), + +without restriction, including without limitation the rights to copy, create +derivative works of, display, perform, and distribute the Software and make, +use, sell, offer for sale, import, export, have made, and have sold the +Software and the Larger Work(s), and to sublicense the foregoing rights on +either these or other terms. + +This license is subject to the following condition: + +The above copyright notice and either this complete permission notice or at a +minimum a reference to the UPL must be included in all copies or substantial +portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/README.md b/ai/gen-ai-agents/oci-enterprise-ai-chat/README.md new file mode 100644 index 000000000..67ab3e8a2 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/README.md @@ -0,0 +1,404 @@ +# OCI Enterprise AI Agents + +A chat interface and agent hub for [Oracle Cloud Infrastructure Enterprise AI](https://www.oracle.com/artificial-intelligence/enterprise-ai/). Streaming responses, MCP tool integration, OAuth2 SSO, and a full settings workbench to tailor the assistant to each deployment. + +Built with **Next.js 16**, **React 19**, and **MUI v7**. + +![Chat home](images/01-chat-home.png) + +--- + +## Quick Start + +```bash +npm install +npm run dev +``` + +Open [http://localhost:3000](http://localhost:3000). On first run, create a `.env.local` with the values from [Configuration](#configuration). + +### Requirements +- Node.js 22+ (the Dockerfile uses `node:22-alpine`) +- An OCI tenancy with access to **Generative AI** (Projects, inference, vector & semantic stores) and **Generative AI Agents** (memory, agent flows) +- Locally: `~/.oci/config` with a valid API key +- In a container: **Resource Principal** configured on the Container Instance + +--- + +## Configuration + +### Required environment variables + +```env +# OCI Enterprise AI: set to your tenancy's region +OCI_REGION=us-chicago-1 # any region key works (us-ashburn-1, eu-frankfurt-1, ap-sydney-1, …) +OCI_COMPARTMENT_ID=ocid1.compartment.oc1..xxxxx +OCI_GENAI_PROJECT_ID=ocid1.generativeaiproject.oc1..xxxxx + +# Local dev (API-key auth via ~/.oci/config) +OCI_CONFIG_FILE=~/.oci/config +OCI_CONFIG_PROFILE=DEFAULT + +# Container deployments (Resource Principal instead of config file) +USE_RESOURCE_PRINCIPAL=true +``` + +> **About the Project.** A **Project** is the OCI Generative AI resource that organizes conversations, responses, files, and sandboxes: it's required for any OpenAI-compatible API call. It's also where you configure data retention (max 720h for both responses and conversations), short-term memory compaction, and long-term memory extraction/embedding models. Memory and compaction settings are **set at project creation and cannot be changed later**, so plan ahead. Create one in the OCI Console under *Analytics & AI → Generative AI → Projects*. + +### SSO (Oracle IDCS), optional but recommended + +```env +IDCS_DOMAIN_URL=https://idcs-xxxx.identity.oraclecloud.com +IDCS_CLIENT_ID=... +IDCS_CLIENT_SECRET=... +SESSION_SECRET= +``` + +When these are set, `src/middleware.js` protects every route and redirects unauthenticated users through the OAuth2 Authorization Code flow (`/api/auth/login` → IDCS → `/api/auth/callback/oci`). Session state lives in a signed cookie. + +### Observability: optional + +```env +LANGFUSE_SECRET_KEY=sk-lf-... +LANGFUSE_PUBLIC_KEY=pk-lf-... +LANGFUSE_BASE_URL=https://cloud.langfuse.com +LOG_LEVEL=info +``` + +### Models + +Models are **discovered dynamically** via `listModels` against the configured compartment. Whatever is enabled in your tenancy shows up in the model picker. No env var needed. + +--- + +## Architecture + +![Architecture overview](images/architecture.png) + +The browser hits `middleware.js` first (session guard). If the user has a valid IDCS session cookie, the request continues to the UI / API layers. The `/api/responses` route signs every request and streams from OCI's Generative AI Responses API; tool calls executed by the model run **on OCI's side** against the registered MCP servers. The app talks directly to MCP servers only when it needs to discover tools or proxy a manual JSON-RPC call. + +--- + +## Features + +### Chat +Real-time SSE streaming, conversation history persisted in OCI Conversation Store and cached locally (IndexedDB), automatic title generation, markdown rendering with code blocks and tables, multi-file attachments. + +### Model picker +Switch models per conversation. The list is discovered dynamically from the configured compartment, so anything enabled in your tenancy shows up automatically. + +![Model picker](images/06-model-selector.png) + +### File attachments: PDF, CSV, TXT, code, spreadsheets +Drop or paste documents straight into the chat. Each file is shown as a card and its contents are sent as context to the model. + +![Attachments + prompt](images/07-attachments-prompt.png) + +The model returns structured analysis across all attached files in one go: + +![Conversation result](images/08-conversation-result.png) + +Supported extensions: `.pdf`, `.txt`, `.md`, `.csv`, `.json`, `.xml`, `.html`, `.css`, `.js`, `.ts`, `.jsx`, `.tsx`, `.py`, `.java`, `.c`, `.cpp`, `.h`, `.yml`, `.yaml`, `.toml`, `.ini`, `.log`, `.sql`, `.sh`, `.bat`, `.xlsx`, `.xls`, plus images. + +### Native OCI tools +Toggle per-tool from Settings → Tools → Native: +- **Web Search** *(coming soon)*, real-time web lookups +- **File Search (RAG)**: vector retrieval over Knowledge Bases +- **Code Interpreter**: Python sandbox with 420+ libraries +- **Text-to-SQL** *(coming soon)*, natural language → SQL against your semantic stores + +![Tools settings](images/03-settings-tools.png) + +### Custom MCP servers +Add any MCP endpoint (API key, Bearer token, OAuth2 client credentials, or OAuth 2.1). Test the connection, discover tools, and selectively enable individual functions. Tokens persist through a signed-cookie flow, no secrets stored in localStorage. + +![Custom MCP servers](images/03b-settings-tools-custom.png) + +### Prompts: Instructions + System +Two separate things on the same tab: + +- **Instructions**: free-text field where you put anything you want the assistant to know about you, your tone, or the context. This is where each user/team customizes the assistant. + + ![Prompts: Instructions](images/02-settings-prompts.png) + +- **System**: read-only viewer of the base system prompt that ships with the app. It's already tuned for OCI workflows (response style, tool transparency, formatting), so you don't need to edit it; if you ever do want to change it, edit `src/app/utils/baseSystemPrompt.js` in code. + + ![Prompts: System](images/02b-settings-prompts-system.png) + +### Memory: long-term and short-term +Two independent memory layers, both backed by OCI's native memory subjects: + +- **Long-Term Memory (LTM)**: persistent across all conversations of the same user. The model can recall facts, preferences, and context from previous sessions (e.g. "the user prefers concise answers in Spanish", "their main project is the auth migration"). Stored against a memory subject in OCI; the subject ID is configured per user in the Memory tab. Useful for personalization that survives logouts and new chats. + +- **Short-Term Memory Optimization (STMO)**: scoped to the current conversation. Compacts and summarizes long chat histories so the model keeps context without burning the token window on raw transcripts. Enabled per-conversation, transparent to the user. + +Both can be turned on independently. LTM needs a memory subject ID; STMO is just a toggle. + +![Memory settings](images/04-settings-memory.png) + +### Appearance: fully white-label +App title, logo, welcome message, accent color, dark mode, background, and live preview. Useful when shipping the app to multiple internal teams or external customers. + +![Appearance settings](images/05-settings-appearance.png) + +The same chat in dark mode: + +![Dark mode](images/09-dark-mode.png) + +### Authentication +- **Oracle IDCS SSO** with OAuth2 Authorization Code (handled by `src/middleware.js` + `src/app/lib/auth.js`) +- **MCP OAuth 2.1** with PKCE for per-tool authorization (`src/app/lib/mcp-oauth.js`) +- Resource Principal auth when running in an OCI Container Instance + +### Observability +Langfuse traces every request when `LANGFUSE_*` env vars are set. The Settings → Observability tab provides an in-app trace viewer. + +--- + +## Project Structure + +``` +src/ +├── middleware.js # Route protection + IDCS redirect +└── app/ + ├── api/ # Next.js API routes + │ ├── auth/ # IDCS OAuth endpoints + │ ├── mcp/ # MCP JSON-RPC proxy + OAuth 2.1 + │ ├── responses/ # Streaming chat proxy + │ ├── conversations/ # Conversation Store CRUD + │ ├── models/ # Model discovery + │ ├── semantic-stores/ # Text-to-SQL stores + │ ├── vector-stores/ # RAG knowledge bases + │ ├── files/ # Uploads + │ └── generate-title/ # Title generation + │ + ├── components/ + │ ├── chat/ # ChatInput, ChatMessage, ChatSidebar + │ ├── settings/ # SettingsPage + tabs + │ ├── ui/ # Header, IOSSwitch, VerticalTabs, … + │ ├── charts/ # Recharts wrappers + │ ├── agent/ # Agent visualizations + │ └── demo/ + │ + ├── config/ + │ ├── app.js # App-wide constants + │ └── darkMode.js # Dark-mode CSS vars + MUI overrides + │ + ├── lib/ # Server-side helpers + │ ├── auth.js # IDCS session + cookie signing + │ ├── mcp-oauth.js # MCP OAuth 2.1 + PKCE + │ ├── oci-auth.js # ConfigFile / ResourcePrincipal + │ ├── oci-proxy.js # Request signing helpers + │ ├── oci-headers.js # Required OCI headers + │ └── logger.js # Structured logging + │ + ├── services/ # Client-side service layer + │ ├── genaiAgentsService.js # Streaming API client + │ ├── conversationStorage.js # IndexedDB cache + │ ├── mcpService.js # MCP client/server mgmt + │ ├── titleService.js # Auto title generation + │ ├── oracleSpeechService.js # Speech integration + │ └── flowService.js # Agent flows + │ + ├── hooks/ + │ └── useChat.js # Streaming chunk processing + state + │ + ├── utils/ + │ ├── messageUtils.js # Message parsing helpers + │ ├── chartParser.js + │ ├── baseSystemPrompt.js + │ └── errorMessages.js + │ + ├── intro/ # Animated intro/splash + ├── login/ # Fallback login UI + ├── settings/ # Deep-linked settings routes + └── page.js # Main chat interface +``` + +--- + +## Data Flow + +### Chat streaming + +![Chat streaming sequence](images/chat-streaming.png) + +1. User sends a message → `useChat.js` calls `genaiAgentsService.sendMessage` +2. Client POSTs to `/api/responses`; the route signs the request and streams from OCI's `/openai/v1/responses` endpoint +3. SSE chunks flow back; `processStreamingChunk` accumulates text and renders it as markdown + +### IDCS SSO (OAuth2 Authorization Code) + +![SSO sequence](images/sso-flow.png) + +### MCP tool invocation +1. OCI executes MCP tools natively via the Responses API. the app **does not run tools itself** +2. For OAuth 2.1 MCP servers (e.g. SDD Generator), the client obtains an access token via `/api/mcp/oauth/*` and passes it to OCI in the tool's `authorization` field +3. Custom servers use the more generic `/api/mcp` JSON-RPC proxy for discovery and direct invocation (outside OCI) + +### Settings persistence +All UI-level preferences live in `localStorage`: + +- **`systemPrompt`** — Custom system instructions +- **`selectedModel`** — Current model ID +- **`uiSettings`** — App title, logo, welcome message, dark mode, accent color +- **`nativeToolsEnabled`** — Native OCI tools (web search, RAG, code, text-to-SQL) +- **`mcpServers`** — Configured custom MCP endpoints +- **`enabledTools`** — Per-function MCP tool selection + +--- + +## OCI API endpoints used + +The app talks to two OCI GenAI hosts, both signed with the same credentials. + +### Inference plane: streaming chat + +``` +POST https://inference.generativeai.{region}.oci.oraclecloud.com/openai/v1/responses +``` + +```json +{ "model": "openai.gpt-4.1", "input": [...], "stream": true } +``` + +Standard OpenAI-compatible Responses API. Used for most chat models, with `OCI_GENAI_PROJECT_ID` sent as the `openai-project` header. + +For **multi-agent models** the same host is used but with the OCI-native path `/v1/responses` (no `/openai` prefix). + +### Control plane: store management + +``` +GET/POST/DELETE https://generativeai.{region}.oci.oraclecloud.com/20231130/... +``` + +CRUD for vector stores (RAG) and semantic stores (Text-to-SQL). The `20231130` is the API version date (2023-11-30). + +--- + +## Deployment on OCI + +The app runs as a **standalone Next.js build** inside an [OCI Container Instance](https://docs.oracle.com/en-us/iaas/Content/container-instances/home.htm), behind a [Load Balancer](https://docs.oracle.com/en-us/iaas/Content/Balance/home.htm) terminating HTTPS. Authentication to OCI services is done via [Resource Principal](https://docs.oracle.com/en-us/iaas/Content/Identity/Tasks/usingdynamicgroups.htm), so no API keys leave the tenancy. + +### One-time setup (in OCI Console) + +1. **OCIR repository**: `Developer Services → Container Registry → Create Repository`. Name it e.g. `oci-enterprise-ai-agents`. Note your tenancy's namespace (visible in the OCIR page header) and region key (e.g. `ord` for Chicago, `iad` for Ashburn). +2. **OCIR Auth Token**: `Profile → User Settings → Auth Tokens → Generate Token`. You'll log in to the registry with this token (`docker login ord.ocir.io -u "/"`). +3. **Dynamic Group**: `Identity → Dynamic Groups → Create`. Match all Container Instances in your compartment: + ``` + ALL {resource.type='computecontainerinstance', resource.compartment.id=''} + ``` +4. **IAM policies**: `Identity → Policies → Create`. Grant the dynamic group access to GenAI, Conversation Store, and any other services you use: + ``` + allow dynamic-group to use generative-ai-family in compartment + allow dynamic-group to manage genai-agent-family in compartment + allow dynamic-group to manage objects in compartment + ``` +5. **(SSO only)** Register the app in **IDCS** as a Confidential Application with redirect URI `https:///api/auth/callback/oci`. Save the Client ID + Secret for the env vars. + +### Build & push the image + +```bash +npm run build +docker buildx build --platform linux/amd64 \ + -t ord.ocir.io//oci-enterprise-ai-agents:latest . + +docker login ord.ocir.io -u "/" # paste OCIR Auth Token as password +docker push ord.ocir.io//oci-enterprise-ai-agents:latest +``` + +### Create the Container Instance + +`Developer Services → Container Instances → Create`: +- **Shape**: `CI.Standard.E4.Flex` (2 OCPU / 8 GB is enough to start). +- **Image**: `ord.ocir.io//oci-enterprise-ai-agents:latest`. +- **OCIR auth**: choose the Auth Token created above. +- **Networking**: VCN with a private subnet (the Load Balancer will be the public entrypoint). +- **Environment variables**: all the ones from the [Configuration](#configuration) section plus: + ``` + USE_RESOURCE_PRINCIPAL=true # use the Dynamic Group identity, not API keys + ``` + Do **not** set `OCI_CONFIG_FILE` / `OCI_CONFIG_PROFILE` here. `PORT=8080` and `HOSTNAME=0.0.0.0` are already baked into the Dockerfile, so you don't need to add them. + +### Put a Load Balancer in front + +`Networking → Load Balancers → Create`: +- **Public LB** with HTTPS listener (attach a certificate). +- **Backend set** pointing to the Container Instance private IP on port `8080`. +- **Health check**: HTTP path `/ready`, interval 30s. +- The middleware reads the `Host` header to build OAuth redirect URIs, so make sure the LB forwards `Host` and `X-Forwarded-Proto`. + +### Updating after a code change + +```bash +# 1. Push a new image with the same tag +docker buildx build --platform linux/amd64 \ + -t ord.ocir.io//oci-enterprise-ai-agents:latest . +docker push ord.ocir.io//oci-enterprise-ai-agents:latest + +# 2. Restart the instance to pull the new image +oci container-instances container-instance restart \ + --container-instance-id \ + --region us-chicago-1 +``` + +### Notes +- A `/ready` healthcheck endpoint is exposed for the LB. +- If you mount the app under a subpath, set `BASE_PATH=/your-path`. +- When the LB-to-backend connection is HTTP (not HTTPS end-to-end), cookies must **not** carry the `Secure` flag. `mcp-oauth.js` and the IDCS auth code already handle this automatically when running over HTTP. +- All secrets (Client Secret, Session Secret, Langfuse keys) should be set as **environment variables on the Container Instance**, never baked into the image. + +--- + +## Commands + +```bash +npm run dev # Dev server (Turbopack) +npm run build # Production build (.next/standalone) +npm run start # Production server +npm run lint # ESLint +npm run test # Playwright tests +``` + +--- + +## Troubleshooting + +**`Invalid value for required field 'model'`** +The model you selected is not available on the OpenAI-compatible endpoint. Pick a different model in Settings → AI, or extend the app to hit the native endpoint. + +**`OCI_COMPARTMENT_ID is required`** +Missing env var. Set it in `.env.local` for local dev or in the Container Instance env for deployment. + +**Authentication errors locally** +- Verify `~/.oci/config` exists and the profile matches `OCI_CONFIG_PROFILE` +- `chmod 600` on the private key +- Confirm the fingerprint matches the key registered in OCI + +**IDCS redirect mismatch** +`getBaseUrl()` strips `:443` and `:80` from the `Host` header so the `redirect_uri` matches what IDCS has registered. If you're behind a custom proxy, ensure the `Host` header passes through. + +**MCP OAuth cookie not found** +OAuth pending-state is stored in a cookie (not in the `state` parameter, because some servers rewrite it). If you serve over HTTP in dev, cookies must not have the `Secure` flag. `mcp-oauth.js` handles this automatically in dev. + +**Recharts "negative dimensions" warnings** +Harmless. Emitted during SSG when charts render with zero-size containers; they have no runtime effect. + +--- + +## Tech Stack + +- **Framework** — Next.js 16 (App Router, standalone output, Turbopack) +- **UI** — React 19, MUI v7, Framer Motion, Lucide icons +- **Charts** — Recharts +- **OCI** — `oci-sdk` (ConfigFile / Resource Principal auth) +- **Protocols** — Server-Sent Events, JSON-RPC 2.0 (MCP), OAuth 2.1 + PKCE +- **Observability** — Langfuse (optional) +- **Testing** — Playwright + +--- + +## Author + +Maintained by **Ras Alungei** ([@ralungei](https://github.com/ralungei)). +For questions, contributions, or feedback, open an issue or pull request. diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/Dockerfile b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/Dockerfile new file mode 100644 index 000000000..f03995dbd --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/Dockerfile @@ -0,0 +1,21 @@ +FROM node:22-alpine + +WORKDIR /app + +# Copy pre-built standalone output (built locally with npm run build) +COPY .next/standalone ./ +COPY .next/static ./.next/static +COPY public ./public + +COPY entrypoint.sh /entrypoint.sh +RUN chmod +x /entrypoint.sh + +ENV PORT=8080 +ENV HOSTNAME=0.0.0.0 + +EXPOSE 8080 + +HEALTHCHECK --interval=30s --timeout=3s --start-period=10s --retries=3 \ + CMD wget --no-verbose --tries=1 --spider http://127.0.0.1:8080/ready || exit 1 + +CMD ["/entrypoint.sh"] diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/entrypoint.sh b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/entrypoint.sh new file mode 100644 index 000000000..010a4cf58 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/entrypoint.sh @@ -0,0 +1,22 @@ +#!/bin/sh +set -e + +PLACEHOLDER="/__BASE_PATH_PLACEHOLDER__" +PREFIX="${BASE_PATH:-}" +PREFIX="${PREFIX%/}" +ESCAPED=$(printf '%s' "$PREFIX" | sed 's/[\/&|]/\\&/g') + +# OCI Hosted Deployments mounts the container filesystem as read-only +# except /tmp. Copy the app to /tmp so we can sed the placeholder. +echo "[entrypoint] Staging app in /tmp/app (OCI fs is read-only outside /tmp)..." +mkdir -p /tmp/app +cp -r /app/. /tmp/app/ +cd /tmp/app + +echo "[entrypoint] Replacing ${PLACEHOLDER} with '${PREFIX}' in built assets..." +find ./server.js ./.next ./public -type f \ + \( -name "*.js" -o -name "*.html" -o -name "*.json" -o -name "*.rsc" -o -name "*.css" \) \ + -exec sed -i "s|${PLACEHOLDER}|${ESCAPED}|g" {} + + +echo "[entrypoint] Done. Starting Next.js server from /tmp/app..." +exec node server.js diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/eslint.config.mjs b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/eslint.config.mjs new file mode 100644 index 000000000..348c45a2f --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/eslint.config.mjs @@ -0,0 +1,14 @@ +import { dirname } from "path"; +import { fileURLToPath } from "url"; +import { FlatCompat } from "@eslint/eslintrc"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +const compat = new FlatCompat({ + baseDirectory: __dirname, +}); + +const eslintConfig = [...compat.extends("next/core-web-vitals")]; + +export default eslintConfig; diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/imageLoader.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/imageLoader.js new file mode 100644 index 000000000..ad63affdf --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/imageLoader.js @@ -0,0 +1,7 @@ +// Custom image loader for next/image. In Next 16, neither assetPrefix nor +// `unoptimized: true` consistently prepend the base path to image URLs. +// This loader prepends the BASE_PATH placeholder, which the container's +// entrypoint rewrites at startup using the BASE_PATH env var. +export default function imageLoader({ src }) { + return `/__BASE_PATH_PLACEHOLDER__${src}`; +} diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/jsconfig.json b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/jsconfig.json new file mode 100644 index 000000000..b8d6842d7 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/jsconfig.json @@ -0,0 +1,7 @@ +{ + "compilerOptions": { + "paths": { + "@/*": ["./src/*"] + } + } +} diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/next.config.mjs b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/next.config.mjs new file mode 100644 index 000000000..4c9079f17 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/next.config.mjs @@ -0,0 +1,19 @@ +const isProd = process.env.NODE_ENV === 'production'; + +/** @type {import('next').NextConfig} */ +const nextConfig = { + devIndicators: false, + output: 'standalone', + compress: false, + // Placeholder is only baked in production builds. The container's entrypoint + // replaces it with the real BASE_PATH env var at runtime. In dev (`next dev`), + // we skip it so everything works against localhost without needing the sed. + ...(isProd && { assetPrefix: '/__BASE_PATH_PLACEHOLDER__' }), + images: { + ...(isProd && { loader: 'custom', loaderFile: './imageLoader.js' }), + dangerouslyAllowSVG: true, + contentSecurityPolicy: "default-src 'self'; script-src 'none'; sandbox;", + }, +}; + +export default nextConfig; diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/package-lock.json b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/package-lock.json new file mode 100644 index 000000000..d3fd5323f --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/package-lock.json @@ -0,0 +1,11522 @@ +{ + "name": "oci-agent-light-demo-creator", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "oci-agent-light-demo-creator", + "version": "0.1.0", + "dependencies": { + "@emotion/cache": "^11.14.0", + "@emotion/react": "^11.14.0", + "@emotion/styled": "^11.14.1", + "@mui/icons-material": "^7.3.7", + "@mui/material": "^7.3.7", + "@mui/material-nextjs": "^7.3.7", + "@mui/x-data-grid": "^8.27.0", + "@uiw/react-json-view": "^2.0.0-alpha.40", + "@xyflow/react": "^12.10.0", + "framer-motion": "^12.27.0", + "html-to-image": "^1.11.13", + "html2canvas": "^1.4.1", + "jspdf": "^4.1.0", + "jspdf-autotable": "^5.0.7", + "langfuse": "^3.38.20", + "lucide-react": "^0.562.0", + "next": "^16.1.3", + "oci-sdk": "^2.124.0", + "pdfjs-dist": "^5.4.624", + "react": "^19.2.3", + "react-dom": "^19.2.3", + "react-markdown": "^10.1.0", + "recharts": "^3.6.0", + "remark-gfm": "^4.0.1", + "xlsx": "^0.18.5" + }, + "devDependencies": { + "@eslint/eslintrc": "^3", + "@iconify/react": "^6.0.2", + "eslint": "^9", + "eslint-config-next": "16.1.3", + "playwright": "^1.57.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.28.6.tgz", + "integrity": "sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.6.tgz", + "integrity": "sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.6.tgz", + "integrity": "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/generator": "^7.28.6", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/core/node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.6.tgz", + "integrity": "sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", + "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.6.tgz", + "integrity": "sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.6" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz", + "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.6.tgz", + "integrity": "sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/generator": "^7.28.6", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.6", + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.6.tgz", + "integrity": "sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emnapi/core": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.3.tgz", + "integrity": "sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.0.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz", + "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.2.tgz", + "integrity": "sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emotion/babel-plugin": { + "version": "11.13.5", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz", + "integrity": "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/serialize": "^1.3.3", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/cache": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz", + "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.9.0", + "@emotion/sheet": "^1.4.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==", + "license": "MIT" + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz", + "integrity": "sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.9.0" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==", + "license": "MIT" + }, + "node_modules/@emotion/react": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz", + "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.13.5", + "@emotion/cache": "^11.14.0", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz", + "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==", + "license": "MIT", + "dependencies": { + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/unitless": "^0.10.0", + "@emotion/utils": "^1.4.2", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz", + "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==", + "license": "MIT" + }, + "node_modules/@emotion/styled": { + "version": "11.14.1", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.1.tgz", + "integrity": "sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.13.5", + "@emotion/is-prop-valid": "^1.3.0", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", + "@emotion/utils": "^1.4.2" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/unitless": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz", + "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==", + "license": "MIT" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz", + "integrity": "sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==", + "license": "MIT", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz", + "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==", + "license": "MIT" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", + "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==", + "license": "MIT" + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz", + "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz", + "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@iconify/react": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@iconify/react/-/react-6.0.2.tgz", + "integrity": "sha512-SMmC2sactfpJD427WJEDN6PMyznTFMhByK9yLW0gOTtnjzzbsi/Ke/XqsumsavFPwNiXs8jSiYeZTmLCLwO+Fg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@iconify/types": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/cyberalien" + }, + "peerDependencies": { + "react": ">=16" + } + }, + "node_modules/@iconify/types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", + "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@img/colour": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.0.0.tgz", + "integrity": "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", + "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", + "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", + "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", + "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", + "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", + "cpu": [ + "ppc64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", + "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "cpu": [ + "riscv64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", + "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", + "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", + "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", + "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", + "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", + "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", + "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", + "cpu": [ + "ppc64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", + "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", + "cpu": [ + "riscv64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", + "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", + "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", + "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", + "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", + "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.7.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", + "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", + "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", + "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@mui/core-downloads-tracker": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-7.3.7.tgz", + "integrity": "sha512-8jWwS6FweMkpyRkrJooamUGe1CQfO1yJ+lM43IyUJbrhHW/ObES+6ry4vfGi8EKaldHL3t3BG1bcLcERuJPcjg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + } + }, + "node_modules/@mui/icons-material": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-7.3.7.tgz", + "integrity": "sha512-3Q+ulAqG+A1+R4ebgoIs7AccaJhIGy+Xi/9OnvX376jQ6wcy+rz4geDGrxQxCGzdjOQr4Z3NgyFSZCz4T999lA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.4" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@mui/material": "^7.3.7", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/material": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-7.3.7.tgz", + "integrity": "sha512-6bdIxqzeOtBAj2wAsfhWCYyMKPLkRO9u/2o5yexcL0C3APqyy91iGSWgT3H7hg+zR2XgE61+WAu12wXPON8b6A==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.4", + "@mui/core-downloads-tracker": "^7.3.7", + "@mui/system": "^7.3.7", + "@mui/types": "^7.4.10", + "@mui/utils": "^7.3.7", + "@popperjs/core": "^2.11.8", + "@types/react-transition-group": "^4.4.12", + "clsx": "^2.1.1", + "csstype": "^3.2.3", + "prop-types": "^15.8.1", + "react-is": "^19.2.3", + "react-transition-group": "^4.4.5" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@mui/material-pigment-css": "^7.3.7", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@mui/material-pigment-css": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/material-nextjs": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/@mui/material-nextjs/-/material-nextjs-7.3.7.tgz", + "integrity": "sha512-xTOLJd46vOTjhzbjPRwujUuUOsWvPkR+hMQ1lkvAUMj6Ntk9wCvb1TxLGRygaJr9KiR924m4XynDPqyyTy0wcQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.4" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/cache": "^11.11.0", + "@emotion/react": "^11.11.4", + "@emotion/server": "^11.11.0", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "next": "^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/cache": { + "optional": true + }, + "@emotion/server": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/material/node_modules/react-is": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.3.tgz", + "integrity": "sha512-qJNJfu81ByyabuG7hPFEbXqNcWSU3+eVus+KJs+0ncpGfMyYdvSmxiJxbWR65lYi1I+/0HBcliO029gc4F+PnA==", + "license": "MIT" + }, + "node_modules/@mui/private-theming": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-7.3.7.tgz", + "integrity": "sha512-w7r1+CYhG0syCAQUWAuV5zSaU2/67WA9JXUderdb7DzCIJdp/5RmJv6L85wRjgKCMsxFF0Kfn0kPgPbPgw/jdw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.4", + "@mui/utils": "^7.3.7", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/styled-engine": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-7.3.7.tgz", + "integrity": "sha512-y/QkNXv6cF6dZ5APztd/dFWfQ6LHKPx3skyYO38YhQD4+Cxd6sFAL3Z38WMSSC8LQz145Mpp3CcLrSCLKPwYAg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.4", + "@emotion/cache": "^11.14.0", + "@emotion/serialize": "^1.3.3", + "@emotion/sheet": "^1.4.0", + "csstype": "^3.2.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.4.1", + "@emotion/styled": "^11.3.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + } + } + }, + "node_modules/@mui/system": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-7.3.7.tgz", + "integrity": "sha512-DovL3k+FBRKnhmatzUMyO5bKkhMLlQ9L7Qw5qHrre3m8zCZmE+31NDVBFfqrbrA7sq681qaEIHdkWD5nmiAjyQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.4", + "@mui/private-theming": "^7.3.7", + "@mui/styled-engine": "^7.3.7", + "@mui/types": "^7.4.10", + "@mui/utils": "^7.3.7", + "clsx": "^2.1.1", + "csstype": "^3.2.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/types": { + "version": "7.4.10", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.4.10.tgz", + "integrity": "sha512-0+4mSjknSu218GW3isRqoxKRTOrTLd/vHi/7UC4+wZcUrOAqD9kRk7UQRL1mcrzqRoe7s3UT6rsRpbLkW5mHpQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.4" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-7.3.7.tgz", + "integrity": "sha512-+YjnjMRnyeTkWnspzoxRdiSOgkrcpTikhNPoxOZW0APXx+urHtUoXJ9lbtCZRCA5a4dg5gSbd19alL1DvRs5fg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.4", + "@mui/types": "^7.4.10", + "@types/prop-types": "^15.7.15", + "clsx": "^2.1.1", + "prop-types": "^15.8.1", + "react-is": "^19.2.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils/node_modules/react-is": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.3.tgz", + "integrity": "sha512-qJNJfu81ByyabuG7hPFEbXqNcWSU3+eVus+KJs+0ncpGfMyYdvSmxiJxbWR65lYi1I+/0HBcliO029gc4F+PnA==", + "license": "MIT" + }, + "node_modules/@mui/x-data-grid": { + "version": "8.27.0", + "resolved": "https://registry.npmjs.org/@mui/x-data-grid/-/x-data-grid-8.27.0.tgz", + "integrity": "sha512-xfx6jQyqUZQm4ZAxuN91fgdDwNiYtvahGv0wHmDK33DFgq68RrLvKSHUq/k79IY1y8N1jYGI8TT3nOipxorhyg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.4", + "@mui/utils": "^7.3.5", + "@mui/x-internals": "8.26.0", + "@mui/x-virtualizer": "0.3.3", + "clsx": "^2.1.1", + "prop-types": "^15.8.1", + "use-sync-external-store": "^1.6.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.9.0", + "@emotion/styled": "^11.8.1", + "@mui/material": "^5.15.14 || ^6.0.0 || ^7.0.0", + "@mui/system": "^5.15.14 || ^6.0.0 || ^7.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + } + } + }, + "node_modules/@mui/x-internals": { + "version": "8.26.0", + "resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-8.26.0.tgz", + "integrity": "sha512-B9OZau5IQUvIxwpJZhoFJKqRpmWf5r0yMmSXjQuqb5WuqM755EuzWJOenY48denGoENzMLT8hQpA0hRTeU2IPA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.4", + "@mui/utils": "^7.3.5", + "reselect": "^5.1.1", + "use-sync-external-store": "^1.6.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@mui/x-virtualizer": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@mui/x-virtualizer/-/x-virtualizer-0.3.3.tgz", + "integrity": "sha512-6ugUh7UAhQYdgPgHLu181zqufh3Y8IqEU9Pe6Huzj0xkRi3NwMx/ZzvrHf2WazNOh2uLhQ5ZM2wFqDu3mxBWZA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.4", + "@mui/utils": "^7.3.5", + "@mui/x-internals": "8.26.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@napi-rs/canvas": { + "version": "0.1.90", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-0.1.90.tgz", + "integrity": "sha512-vO9j7TfwF9qYCoTOPO39yPLreTRslBVOaeIwhDZkizDvBb0MounnTl0yeWUMBxP4Pnkg9Sv+3eQwpxNUmTwt0w==", + "license": "MIT", + "optional": true, + "workspaces": [ + "e2e/*" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "optionalDependencies": { + "@napi-rs/canvas-android-arm64": "0.1.90", + "@napi-rs/canvas-darwin-arm64": "0.1.90", + "@napi-rs/canvas-darwin-x64": "0.1.90", + "@napi-rs/canvas-linux-arm-gnueabihf": "0.1.90", + "@napi-rs/canvas-linux-arm64-gnu": "0.1.90", + "@napi-rs/canvas-linux-arm64-musl": "0.1.90", + "@napi-rs/canvas-linux-riscv64-gnu": "0.1.90", + "@napi-rs/canvas-linux-x64-gnu": "0.1.90", + "@napi-rs/canvas-linux-x64-musl": "0.1.90", + "@napi-rs/canvas-win32-arm64-msvc": "0.1.90", + "@napi-rs/canvas-win32-x64-msvc": "0.1.90" + } + }, + "node_modules/@napi-rs/canvas-android-arm64": { + "version": "0.1.90", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.90.tgz", + "integrity": "sha512-3JBULVF+BIgr7yy7Rf8UjfbkfFx4CtXrkJFD1MDgKJ83b56o0U9ciT8ZGTCNmwWkzu8RbNKlyqPP3KYRG88y7Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-darwin-arm64": { + "version": "0.1.90", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-0.1.90.tgz", + "integrity": "sha512-L8XVTXl+8vd8u7nPqcX77NyG5RuFdVsJapQrKV9WE3jBayq1aSMht/IH7Dwiz/RNJ86E5ZSg9pyUPFIlx52PZA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-darwin-x64": { + "version": "0.1.90", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.90.tgz", + "integrity": "sha512-h0ukhlnGhacbn798VWYTQZpf6JPDzQYaow+vtQ2Fat7j7ImDdpg6tfeqvOTO1r8wS+s+VhBIFITC7aA1Aik0ZQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-linux-arm-gnueabihf": { + "version": "0.1.90", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.90.tgz", + "integrity": "sha512-JCvTl99b/RfdBtgftqrf+5UNF7GIbp7c5YBFZ+Bd6++4Y3phaXG/4vD9ZcF1bw1P4VpALagHmxvodHuQ9/TfTg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-linux-arm64-gnu": { + "version": "0.1.90", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.90.tgz", + "integrity": "sha512-vbWFp8lrP8NIM5L4zNOwnsqKIkJo0+GIRUDcLFV9XEJCptCc1FY6/tM02PT7GN4PBgochUPB1nBHdji6q3ieyQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-linux-arm64-musl": { + "version": "0.1.90", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.90.tgz", + "integrity": "sha512-8Bc0BgGEeOaux4EfIfNzcRRw0JE+lO9v6RWQFCJNM9dJFE4QJffTf88hnmbOaI6TEMpgWOKipbha3dpIdUqb/g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-linux-riscv64-gnu": { + "version": "0.1.90", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-0.1.90.tgz", + "integrity": "sha512-0iiVDG5IH+gJb/YUrY/pRdbsjcgvwUmeckL/0gShWAA7004ygX2ST69M1wcfyxXrzFYjdF8S/Sn6aCAeBi89XQ==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-linux-x64-gnu": { + "version": "0.1.90", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.90.tgz", + "integrity": "sha512-SkKmlHMvA5spXuKfh7p6TsScDf7lp5XlMbiUhjdCtWdOS6Qke/A4qGVOciy6piIUCJibL+YX+IgdGqzm2Mpx/w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-linux-x64-musl": { + "version": "0.1.90", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.90.tgz", + "integrity": "sha512-o6QgS10gAS4vvELGDOOWYfmERXtkVRYFWBCjomILWfMgCvBVutn8M97fsMW5CrEuJI8YuxuJ7U+/DQ9oG93vDA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-win32-arm64-msvc": { + "version": "0.1.90", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-arm64-msvc/-/canvas-win32-arm64-msvc-0.1.90.tgz", + "integrity": "sha512-2UHO/DC1oyuSjeCAhHA0bTD9qsg58kknRqjJqRfvIEFtdqdtNTcWXMCT9rQCuJ8Yx5ldhyh2SSp7+UDqD2tXZQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-win32-x64-msvc": { + "version": "0.1.90", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.90.tgz", + "integrity": "sha512-48CxEbzua5BP4+OumSZdi3+9fNiRO8cGNBlO2bKwx1PoyD1R2AXzPtqd/no1f1uSl0W2+ihOO1v3pqT3USbmgQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.9.tgz", + "integrity": "sha512-OKRBiajrrxB9ATokgEQoG87Z25c67pCpYcCwmXYX8PBftC9pBfN18gnm/fh1wurSLEKIAt+QRFLFCQISrb66Jg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.0", + "@emnapi/runtime": "^1.4.0", + "@tybys/wasm-util": "^0.9.0" + } + }, + "node_modules/@next/env": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/@next/env/-/env-16.1.3.tgz", + "integrity": "sha512-BLP14oBOvZWXgfdJf9ao+VD8O30uE+x7PaV++QtACLX329WcRSJRO5YJ+Bcvu0Q+c/lei41TjSiFf6pXqnpbQA==", + "license": "MIT" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-16.1.3.tgz", + "integrity": "sha512-MqBh3ltFAy0AZCRFVdjVjjeV7nEszJDaVIpDAnkQcn8U9ib6OEwkSnuK6xdYxMGPhV/Y4IlY6RbDipPOpLfBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-glob": "3.3.1" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.1.3.tgz", + "integrity": "sha512-CpOD3lmig6VflihVoGxiR/l5Jkjfi4uLaOR4ziriMv0YMDoF6cclI+p5t2nstM8TmaFiY6PCTBgRWB57/+LiBA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.1.3.tgz", + "integrity": "sha512-aF4us2JXh0zn3hNxvL1Bx3BOuh8Lcw3p3Xnurlvca/iptrDH1BrpObwkw9WZra7L7/0qB9kjlREq3hN/4x4x+Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.1.3.tgz", + "integrity": "sha512-8VRkcpcfBtYvhGgXAF7U3MBx6+G1lACM1XCo1JyaUr4KmAkTNP8Dv2wdMq7BI+jqRBw3zQE7c57+lmp7jCFfKA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.1.3.tgz", + "integrity": "sha512-UbFx69E2UP7MhzogJRMFvV9KdEn4sLGPicClwgqnLht2TEi204B71HuVfps3ymGAh0c44QRAF+ZmvZZhLLmhNg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.1.3.tgz", + "integrity": "sha512-SzGTfTjR5e9T+sZh5zXqG/oeRQufExxBF6MssXS7HPeZFE98JDhCRZXpSyCfWrWrYrzmnw/RVhlP2AxQm+wkRQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.1.3.tgz", + "integrity": "sha512-HlrDpj0v+JBIvQex1mXHq93Mht5qQmfyci+ZNwGClnAQldSfxI6h0Vupte1dSR4ueNv4q7qp5kTnmLOBIQnGow==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.1.3.tgz", + "integrity": "sha512-3gFCp83/LSduZMSIa+lBREP7+5e7FxpdBoc9QrCdmp+dapmTK9I+SLpY60Z39GDmTXSZA4huGg9WwmYbr6+WRw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.1.3.tgz", + "integrity": "sha512-1SZVfFT8zmMB+Oblrh5OKDvUo5mYQOkX2We6VGzpg7JUVZlqe4DYOFGKYZKTweSx1gbMixyO1jnFT4thU+nNHQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nolyfill/is-core-module": { + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", + "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.4.0" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@reduxjs/toolkit": { + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.11.2.tgz", + "integrity": "sha512-Kd6kAHTA6/nUpp8mySPqj3en3dm0tdMIgbttnQ1xFMVpufoj+ADi8pXLBsd4xzTRHQa7t/Jv8W5UnCuW4kuWMQ==", + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "@standard-schema/utils": "^0.3.0", + "immer": "^11.0.0", + "redux": "^5.0.1", + "redux-thunk": "^3.1.0", + "reselect": "^5.1.0" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18 || ^19", + "react-redux": "^7.2.1 || ^8.1.3 || ^9.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-redux": { + "optional": true + } + } + }, + "node_modules/@reduxjs/toolkit/node_modules/immer": { + "version": "11.1.3", + "resolved": "https://registry.npmjs.org/immer/-/immer-11.1.3.tgz", + "integrity": "sha512-6jQTc5z0KJFtr1UgFpIL3N9XSC3saRaI9PwWtzM2pSqkNGtiNkYY2OSwkOGDK2XcTRcLb1pi/aNkKZz0nxVH4Q==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "license": "MIT" + }, + "node_modules/@standard-schema/utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@standard-schema/utils/-/utils-0.3.0.tgz", + "integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==", + "license": "MIT" + }, + "node_modules/@swc/helpers": { + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", + "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", + "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/d3-array": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz", + "integrity": "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==", + "license": "MIT" + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "license": "MIT" + }, + "node_modules/@types/d3-drag": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz", + "integrity": "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-ease": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", + "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==", + "license": "MIT" + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "license": "MIT", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-path": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz", + "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==", + "license": "MIT" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz", + "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==", + "license": "MIT", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-selection": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.11.tgz", + "integrity": "sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==", + "license": "MIT" + }, + "node_modules/@types/d3-shape": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.8.tgz", + "integrity": "sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==", + "license": "MIT", + "dependencies": { + "@types/d3-path": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", + "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", + "license": "MIT" + }, + "node_modules/@types/d3-timer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==", + "license": "MIT" + }, + "node_modules/@types/d3-transition": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.9.tgz", + "integrity": "sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-zoom": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz", + "integrity": "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==", + "license": "MIT", + "dependencies": { + "@types/d3-interpolate": "*", + "@types/d3-selection": "*" + } + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "license": "MIT" + }, + "node_modules/@types/estree-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/isomorphic-fetch": { + "version": "0.0.35", + "resolved": "https://registry.npmjs.org/@types/isomorphic-fetch/-/isomorphic-fetch-0.0.35.tgz", + "integrity": "sha512-DaZNUvLDCAnCTjgwxgiL1eQdxIKEpNLOlTNtAgnZc50bG2copGhRrFN9/PxPBuJe+tZVLCbQ7ls0xveXVRPkvw==", + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/jsonwebtoken": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", + "integrity": "sha512-mM4TkDpA9oixqg1Fv2vVpOFyIVLJjm5x4k0V+K/rEsizfjD7Tk7LKk3GTtbB7KCfP0FEHQtsZqFxYA0+sijNVg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/jssha": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/jssha/-/jssha-2.0.0.tgz", + "integrity": "sha512-oBnY3csYnXfqZXDRBJwP1nDDJCW/+VMJ88UHT4DCy0deSXpJIQvMCwYlnmdW4M+u7PiSfQc44LmiFcUbJ8hLEw==", + "license": "MIT" + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.1.0.tgz", + "integrity": "sha512-t7frlewr6+cbx+9Ohpl0NOTKXZNV9xHRmNOvql47BFJKcEG1CxtxlPEEe+gR9uhVWM4DwhnvTF110mIL4yP9RA==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@types/opossum": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@types/opossum/-/opossum-4.1.1.tgz", + "integrity": "sha512-9TMnd8AWRVtnZMqBbbzceQoJdafErgUViogFaQ3eetsbeLtiFFZ695mepNaLtlfJi4uRP3GmHfe3CJ2DZKaxYA==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/pako": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/pako/-/pako-2.0.4.tgz", + "integrity": "sha512-VWDCbrLeVXJM9fihYodcLiIv0ku+AlOa/TQ1SvYOaBuyrSKgEcro95LJyIsJ4vSo6BXIxOKxiJAat04CmST9Fw==", + "license": "MIT" + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "license": "MIT" + }, + "node_modules/@types/prop-types": { + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "license": "MIT" + }, + "node_modules/@types/raf": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@types/raf/-/raf-3.4.3.tgz", + "integrity": "sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw==", + "license": "MIT", + "optional": true + }, + "node_modules/@types/react": { + "version": "19.1.2", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.2.tgz", + "integrity": "sha512-oxLPMytKchWGbnQM9O7D67uPa9paTNxO7jVoNMXgkkErULBPhPARCfkKL9ytcIJJRGjbsVwW4ugJzyFFvm/Tiw==", + "license": "MIT", + "peer": true, + "dependencies": { + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-transition-group": { + "version": "4.4.12", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz", + "integrity": "sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/sshpk": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/@types/sshpk/-/sshpk-1.10.3.tgz", + "integrity": "sha512-cru1waDhHZnZuB18E6Dgf2UXf8U93mdOEDcKYe5jTri+fpucidSs7DLmGICpLxN+95aYkwtgeyny9fBFzQVdmA==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "license": "MIT", + "optional": true + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/@types/use-sync-external-store": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz", + "integrity": "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==", + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.53.0.tgz", + "integrity": "sha512-eEXsVvLPu8Z4PkFibtuFJLJOTAV/nPdgtSjkGoPpddpFk3/ym2oy97jynY6ic2m6+nc5M8SE1e9v/mHKsulcJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.53.0", + "@typescript-eslint/type-utils": "8.53.0", + "@typescript-eslint/utils": "8.53.0", + "@typescript-eslint/visitor-keys": "8.53.0", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.53.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.53.0.tgz", + "integrity": "sha512-npiaib8XzbjtzS2N4HlqPvlpxpmZ14FjSJrteZpPxGUaYPlvhzlzUZ4mZyABo0EFrOWnvyd0Xxroq//hKhtAWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.53.0", + "@typescript-eslint/types": "8.53.0", + "@typescript-eslint/typescript-estree": "8.53.0", + "@typescript-eslint/visitor-keys": "8.53.0", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.53.0.tgz", + "integrity": "sha512-Bl6Gdr7NqkqIP5yP9z1JU///Nmes4Eose6L1HwpuVHwScgDPPuEWbUVhvlZmb8hy0vX9syLk5EGNL700WcBlbg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.53.0", + "@typescript-eslint/types": "^8.53.0", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.53.0.tgz", + "integrity": "sha512-kWNj3l01eOGSdVBnfAF2K1BTh06WS0Yet6JUgb9Cmkqaz3Jlu0fdVUjj9UI8gPidBWSMqDIglmEXifSgDT/D0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.53.0", + "@typescript-eslint/visitor-keys": "8.53.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.53.0.tgz", + "integrity": "sha512-K6Sc0R5GIG6dNoPdOooQ+KtvT5KCKAvTcY8h2rIuul19vxH5OTQk7ArKkd4yTzkw66WnNY0kPPzzcmWA+XRmiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.53.0.tgz", + "integrity": "sha512-BBAUhlx7g4SmcLhn8cnbxoxtmS7hcq39xKCgiutL3oNx1TaIp+cny51s8ewnKMpVUKQUGb41RAUWZ9kxYdovuw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.53.0", + "@typescript-eslint/typescript-estree": "8.53.0", + "@typescript-eslint/utils": "8.53.0", + "debug": "^4.4.3", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.53.0.tgz", + "integrity": "sha512-Bmh9KX31Vlxa13+PqPvt4RzKRN1XORYSLlAE+sO1i28NkisGbTtSLFVB3l7PWdHtR3E0mVMuC7JilWJ99m2HxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.53.0.tgz", + "integrity": "sha512-pw0c0Gdo7Z4xOG987u3nJ8akL9093yEEKv8QTJ+Bhkghj1xyj8cgPaavlr9rq8h7+s6plUJ4QJYw2gCZodqmGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.53.0", + "@typescript-eslint/tsconfig-utils": "8.53.0", + "@typescript-eslint/types": "8.53.0", + "@typescript-eslint/visitor-keys": "8.53.0", + "debug": "^4.4.3", + "minimatch": "^9.0.5", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.53.0.tgz", + "integrity": "sha512-XDY4mXTez3Z1iRDI5mbRhH4DFSt46oaIFsLg+Zn97+sYrXACziXSQcSelMybnVZ5pa1P6xYkPr5cMJyunM1ZDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.53.0", + "@typescript-eslint/types": "8.53.0", + "@typescript-eslint/typescript-estree": "8.53.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.53.0.tgz", + "integrity": "sha512-LZ2NqIHFhvFwxG0qZeLL9DvdNAHPGCY5dIRwBhyYeU+LfLhcStE1ImjsuTG/WaVh3XysGaeLW8Rqq7cGkPCFvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.53.0", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@uiw/react-json-view": { + "version": "2.0.0-alpha.40", + "resolved": "https://registry.npmjs.org/@uiw/react-json-view/-/react-json-view-2.0.0-alpha.40.tgz", + "integrity": "sha512-j8YgmUrLAokX0k3TJC1+Rae3G2XS2hTYA9SsnQVWeQpn/PiqxwG8mI4A5TCASUTltPtpM/9Yp+mRm7L4Wjy8rw==", + "license": "MIT", + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + }, + "peerDependencies": { + "@babel/runtime": ">=7.10.0", + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "license": "ISC" + }, + "node_modules/@unrs/resolver-binding-darwin-arm64": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.6.3.tgz", + "integrity": "sha512-+BbDAtwT4AVUyGIfC6SimaA6Mi/tEJCf5OYV5XQg7WIOW0vyD15aVgDLvsQscIZxgz42xB6DDqR7Kv6NBQJrEg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-x64": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.6.3.tgz", + "integrity": "sha512-q6qMXI8wT0u0GUns/L26kYHdX2du4yEhwxrXjPj/egvysI8XqcTyjnbWQm3NSJPw0Un2wvKPh0WuoTSJEZgbqw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-freebsd-x64": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.6.3.tgz", + "integrity": "sha512-/7xs7QNNW17VZrFBf+2C95G72rA5c0YGtR18pvWrzM2tVPLrTsKnLl32hi3CG7F6cwwYRy7h61BIkMHh7qaZkw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.6.3.tgz", + "integrity": "sha512-2xv5cUQCt+eYuq5tPF4AHStpzE8i8qdYnhitpvDv9vxzOZ5a0sdzgA8WHYgFe15dP469YOSivenMMdpuRcgE9Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.6.3.tgz", + "integrity": "sha512-4KaZxKIeFt/jAOD/zuBOLb5yyZk/XG9FKf5IXpDP21NcYxeus/os6w+NCK7wjSJKbOpHZhwfkAYLkfujkAOFkw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.6.3.tgz", + "integrity": "sha512-dJoZsZoWwvfS+khk0jkX6KnLL1T2vbRfsxinOR3PghpRKmMTnasEVAxmrXLQFNKqVKZV/mU7gHzWhiBMhbq3bw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-musl": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.6.3.tgz", + "integrity": "sha512-2Y6JcAY9e557rD6O53Zmeblrfu48vQfl5CrrKjt0/2J1Op/pKX3WI8TOh0gs5T4qX9uJDqdte11SNUssckdfUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.6.3.tgz", + "integrity": "sha512-kvcEe+j0De/DEfTNkte2xtmwSL4/GMesArcqmSgRqoOaGknUYY3whJ/3GygYKNMe82vvao4PaQkBlCrxhi88wQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.6.3.tgz", + "integrity": "sha512-fruY8swKre2H0J96h8HE+kN3iUnDR3VDd2wxBn4BxDw+5g7GOHBz5x1533l9mqAqHI4b2dMBECI4RtQdMOiBeQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.6.3.tgz", + "integrity": "sha512-1w0eaSxm9e69TEj9eArZDPQ7mL2VL6Bb4AXeLOdQoe5SNQpZaL6RlwGm7ss9xErwC7c9Hvob/ZZF7i8xYT55zg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-gnu": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.6.3.tgz", + "integrity": "sha512-ymUqs8AQyHTQQ50aN7EcMV47gKh5yKg8a0+SWSuDZEl6eGEOKn590D/iMDydS5KoWbMTy6/pBipS4vsPUEjYVw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-musl": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.6.3.tgz", + "integrity": "sha512-LSfz1cguLZD+c00aTVbtrqX1x1sIR38M2lLYW3CZTGfippkg56Hf8kejHPA8H26OwB71c9/W78BCbgcdnEW+jQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.6.3.tgz", + "integrity": "sha512-gehKZDmNDS2QTxefwPBLi0RJgOQ0dIoD/osCcNboDb3+ZKcbSMBaF3+4R5vj+XdV0QBdZg3vXwdwZswfEkQOcA==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^0.2.9" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.6.3.tgz", + "integrity": "sha512-CzTmpDxwkoYl69stmlJzcVWITQEC6Vs8ASMZMEMbFO+q1Dw0GtpRjAA6X76zGcLOADDwzugx1vpT6YXarrhpTA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.6.3.tgz", + "integrity": "sha512-j+n1gWkfu4Q/octUHXU1p1IOrh+B27vpA7ec81RB6nXCml5u7F0B7SrCZU+HqajxjVqgEQEYOcRCb1yzfwfsWw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-x64-msvc": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.6.3.tgz", + "integrity": "sha512-n33drkd84G5Mu2BkUGawZXmm+IFPuRv7GpODfwEBs/CzZq2+BIZyAZmb03H9IgNbd7xaohZbtZ4/9Gb0xo5ssw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@xyflow/react": { + "version": "12.10.0", + "resolved": "https://registry.npmjs.org/@xyflow/react/-/react-12.10.0.tgz", + "integrity": "sha512-eOtz3whDMWrB4KWVatIBrKuxECHqip6PfA8fTpaS2RUGVpiEAe+nqDKsLqkViVWxDGreq0lWX71Xth/SPAzXiw==", + "license": "MIT", + "dependencies": { + "@xyflow/system": "0.0.74", + "classcat": "^5.0.3", + "zustand": "^4.4.0" + }, + "peerDependencies": { + "react": ">=17", + "react-dom": ">=17" + } + }, + "node_modules/@xyflow/system": { + "version": "0.0.74", + "resolved": "https://registry.npmjs.org/@xyflow/system/-/system-0.0.74.tgz", + "integrity": "sha512-7v7B/PkiVrkdZzSbL+inGAo6tkR/WQHHG0/jhSvLQToCsfa8YubOGmBYd1s08tpKpihdHDZFwzQZeR69QSBb4Q==", + "license": "MIT", + "dependencies": { + "@types/d3-drag": "^3.0.7", + "@types/d3-interpolate": "^3.0.4", + "@types/d3-selection": "^3.0.10", + "@types/d3-transition": "^3.0.8", + "@types/d3-zoom": "^3.0.8", + "d3-drag": "^3.0.0", + "d3-interpolate": "^3.0.1", + "d3-selection": "^3.0.0", + "d3-zoom": "^3.0.0" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/adler-32": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz", + "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "license": "MIT", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/await-semaphore": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/await-semaphore/-/await-semaphore-0.1.3.tgz", + "integrity": "sha512-d1W2aNSYcz/sxYO4pMGX9vq65qOTu0P800epMud+6cYYX0QcT7zyqcxec3VWzpgvdXo57UWmVbZpLMjX2m1I7Q==", + "license": "MIT" + }, + "node_modules/axe-core": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.3.tgz", + "integrity": "sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==", + "dev": true, + "license": "MPL-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.9.15", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.15.tgz", + "integrity": "sha512-kX8h7K2srmDyYnXRIppo4AH/wYgzWVCs+eKr3RusRSQ5PvRYoEFmR/I0PbdTjKFAoKqp5+kbxnNTFO9jOfSVJg==", + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "license": "BSD-3-Clause" + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001765", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001765.tgz", + "integrity": "sha512-LWcNtSyZrakjECqmpP4qdg0MMGdN368D7X8XvvAqOcqMv0RxnlqVKZl2V6/mBR68oYMxOZPLw/gO7DuisMHUvQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/canvg": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/canvg/-/canvg-3.0.11.tgz", + "integrity": "sha512-5ON+q7jCTgMp9cjpu4Jo6XbvfYwSB2Ow3kzHKfIyJfaCAOHLbdKPQqGKgfED/R5B+3TFFfe8pegYA+b423SRyA==", + "license": "MIT", + "optional": true, + "dependencies": { + "@babel/runtime": "^7.12.5", + "@types/raf": "^3.4.0", + "core-js": "^3.8.3", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.7", + "rgbcolor": "^1.0.1", + "stackblur-canvas": "^2.0.0", + "svg-pathdata": "^6.0.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/cfb": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.2.tgz", + "integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==", + "license": "Apache-2.0", + "dependencies": { + "adler-32": "~1.3.0", + "crc-32": "~1.2.0" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/classcat": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/classcat/-/classcat-5.0.5.tgz", + "integrity": "sha512-JhZUT7JFcQy/EzW605k/ktHtncoo9vnyW/2GspNYwFlN1C/WmjuV/xtS04e9SOkL2sTdw0VAZ2UGCcQ9lR6p6w==", + "license": "MIT" + }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", + "license": "MIT" + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/codepage": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz", + "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "license": "MIT" + }, + "node_modules/core-js": { + "version": "3.48.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.48.0.tgz", + "integrity": "sha512-zpEHTy1fjTMZCKLHUZoVeylt9XrzaIN2rbPXEt0k+q7JE5CkCZdo6bNq55bn24a69CH7ErAVLKijxJja4fw+UQ==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "license": "MIT", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "license": "Apache-2.0", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-line-break": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz", + "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==", + "license": "MIT", + "dependencies": { + "utrie": "^1.0.2" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" + }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.2.tgz", + "integrity": "sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "license": "ISC", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "license": "ISC", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "license": "ISC", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "license": "ISC", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" + } + }, + "node_modules/d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js-light": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", + "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==", + "license": "MIT" + }, + "node_modules/decode-named-character-reference": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.1.0.tgz", + "integrity": "sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "node_modules/dompurify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.3.1.tgz", + "integrity": "sha512-qkdCKzLNtrgPFP1Vo+98FRzJnBRGe4ffyCea9IwHB1fyxPOeNTHpLKYGd4Uk9xvNoH0ZoOjwZxNptyMwqrId1Q==", + "license": "(MPL-2.0 OR Apache-2.0)", + "optional": true, + "optionalDependencies": { + "@types/trusted-types": "^2.0.7" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "license": "MIT", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.267", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", + "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-ex/node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" + }, + "node_modules/es-abstract": { + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.1.tgz", + "integrity": "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", + "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.6", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.4", + "safe-array-concat": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-toolkit": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.44.0.tgz", + "integrity": "sha512-6penXeZalaV88MM3cGkFZZfOoLGWshWWfdy0tWw/RlVVyhvMaWSBTOvXNeiW3e5FwdS5ePW0LGEu17zT139ktg==", + "license": "MIT", + "workspaces": [ + "docs", + "benchmarks" + ] + }, + "node_modules/es6-promise": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.6.tgz", + "integrity": "sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q==", + "license": "MIT" + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz", + "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.39.2", + "@eslint/plugin-kit": "^0.4.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-config-next": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-16.1.3.tgz", + "integrity": "sha512-q2Z87VSsoJcv+vgR+Dm8NPRf+rErXcRktuBR5y3umo/j5zLjIWH7rqBCh3X804gUGKbOrqbgsLUkqDE35C93Gw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@next/eslint-plugin-next": "16.1.3", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-jsx-a11y": "^6.10.0", + "eslint-plugin-react": "^7.37.0", + "eslint-plugin-react-hooks": "^7.0.0", + "globals": "16.4.0", + "typescript-eslint": "^8.46.0" + }, + "peerDependencies": { + "eslint": ">=9.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-config-next/node_modules/globals": { + "version": "16.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.4.0.tgz", + "integrity": "sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz", + "integrity": "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@nolyfill/is-core-module": "1.0.39", + "debug": "^4.4.0", + "get-tsconfig": "^4.10.0", + "is-bun-module": "^2.0.0", + "stable-hash": "^0.0.5", + "tinyglobby": "^0.2.13", + "unrs-resolver": "^1.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-import-resolver-typescript" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*", + "eslint-plugin-import-x": "*" + }, + "peerDependenciesMeta": { + "eslint-plugin-import": { + "optional": true + }, + "eslint-plugin-import-x": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", + "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.32.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", + "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.9", + "array.prototype.findlastindex": "^1.2.6", + "array.prototype.flat": "^1.3.3", + "array.prototype.flatmap": "^1.3.3", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.1", + "hasown": "^2.0.2", + "is-core-module": "^2.16.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.1", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.9", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", + "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "aria-query": "^5.3.2", + "array-includes": "^3.1.8", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "^4.10.0", + "axobject-query": "^4.1.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "hasown": "^2.0.2", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.1" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.37.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", + "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.9", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.0.1.tgz", + "integrity": "sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.24.4", + "@babel/parser": "^7.24.4", + "hermes-parser": "^0.25.1", + "zod": "^3.25.0 || ^4.0.0", + "zod-validation-error": "^3.5.0 || ^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-util-is-identifier-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "license": "MIT" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-png": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/fast-png/-/fast-png-6.4.0.tgz", + "integrity": "sha512-kAqZq1TlgBjZcLr5mcN6NP5Rv4V2f22z00c3g8vRrwkcqjerx7BEhPbOnWCPqaHUl2XWQBJQvOT/FQhdMT7X/Q==", + "license": "MIT", + "dependencies": { + "@types/pako": "^2.0.3", + "iobuffer": "^5.3.2", + "pako": "^2.1.0" + } + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fflate": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", + "license": "MIT" + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "license": "MIT" + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/frac": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz", + "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/framer-motion": { + "version": "12.27.0", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.27.0.tgz", + "integrity": "sha512-gJtqOKEDJH/jrn0PpsWp64gdOjBvGX8hY6TWstxjDot/85daIEtJHl1UsiwHSXiYmJF2QXUoXP6/3gGw5xY2YA==", + "license": "MIT", + "dependencies": { + "motion-dom": "^12.27.0", + "motion-utils": "^12.24.10", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz", + "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hast-util-to-jsx-runtime": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", + "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hermes-estree": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", + "dev": true, + "license": "MIT" + }, + "node_modules/hermes-parser": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hermes-estree": "0.25.1" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "license": "BSD-3-Clause", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/html-to-image": { + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/html-to-image/-/html-to-image-1.11.13.tgz", + "integrity": "sha512-cuOPoI7WApyhBElTTb9oqsawRvZ0rHhaHwghRLlTuffoD1B2aDemlCruLeZrUIIdvG7gs9xeELEPm6PhuASqrg==", + "license": "MIT" + }, + "node_modules/html-url-attributes": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/html-url-attributes/-/html-url-attributes-3.0.1.tgz", + "integrity": "sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/html2canvas": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz", + "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==", + "license": "MIT", + "dependencies": { + "css-line-break": "^2.1.0", + "text-segmentation": "^1.0.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-signature": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.1.tgz", + "integrity": "sha512-Y29YKEc8MQsjch/VzkUVJ+2MXd9WcR42fK5u36CZf4G8bXw2DXMTWuESiB0R6m59JAWxlPPw5/Fri/t/AyyueA==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.14.1" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immer": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/immer/-/immer-10.2.0.tgz", + "integrity": "sha512-d/+XTN3zfODyjr89gM3mPq1WNX2B8pYsu7eORitdwyA2sBubnTl3laYlBk4sXY5FUa5qTZGBDPJICVbvqzjlbw==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inline-style-parser": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz", + "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==", + "license": "MIT" + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/iobuffer": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/iobuffer/-/iobuffer-5.4.0.tgz", + "integrity": "sha512-DRebOWuqDvxunfkNJAlc3IzWIPD5xVxwUNbHr7xKB8E6aLJxIPfNX3CoMJghcFjpv6RWQsrcJbghtEwSPoJqMA==", + "license": "MIT" + }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bun-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz", + "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.7.1" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/isomorphic-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", + "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.6.1", + "whatwg-fetch": "^3.4.1" + } + }, + "node_modules/iterator.prototype": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", + "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", + "license": "MIT", + "dependencies": { + "jws": "^3.2.2", + "lodash": "^4.17.21", + "ms": "^2.1.1", + "semver": "^7.3.8" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jspdf": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/jspdf/-/jspdf-4.1.0.tgz", + "integrity": "sha512-xd1d/XRkwqnsq6FP3zH1Q+Ejqn2ULIJeDZ+FTKpaabVpZREjsJKRJwuokTNgdqOU+fl55KgbvgZ1pRTSWCP2kQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.28.4", + "fast-png": "^6.2.0", + "fflate": "^0.8.1" + }, + "optionalDependencies": { + "canvg": "^3.0.11", + "core-js": "^3.6.0", + "dompurify": "^3.3.1", + "html2canvas": "^1.0.0-rc.5" + } + }, + "node_modules/jspdf-autotable": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/jspdf-autotable/-/jspdf-autotable-5.0.7.tgz", + "integrity": "sha512-2wr7H6liNDBYNwt25hMQwXkEWFOEopgKIvR1Eukuw6Zmprm/ZcnmLTQEjW7Xx3FCbD3v7pflLcnMAv/h1jFDQw==", + "license": "MIT", + "peerDependencies": { + "jspdf": "^2 || ^3 || ^4" + } + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "license": "MIT", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/jssha": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/jssha/-/jssha-2.4.1.tgz", + "integrity": "sha512-77DN1YurYgh+7FPCTJ2CQ6hVDHgIWiHxm4Y5/mAdnpETKYagX22pVWMz4xfKF5fcpNfMaztgVj+/B1bt2k23Eg==", + "deprecated": "jsSHA versions < 3.0.0 will no longer receive feature updates", + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/jwa": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.2.tgz", + "integrity": "sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==", + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.3.tgz", + "integrity": "sha512-byiJ0FLRdLdSVSReO/U4E7RoEyOCKnEnEPMjq3HxWtvzLsV08/i5RQKsFVNkCldrCaPr2vDNAOMsfs8T/Hze7g==", + "license": "MIT", + "dependencies": { + "jwa": "^1.4.2", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/langfuse": { + "version": "3.38.20", + "resolved": "https://registry.npmjs.org/langfuse/-/langfuse-3.38.20.tgz", + "integrity": "sha512-MAmBAASSzJtmK1O9HQegA1mFsQhT8Yf+OJRGvE7FXkyv3g/eiBE0glLD0Ohg3pkxhoPdggM5SejK7ue9ctlaMA==", + "license": "MIT", + "dependencies": { + "langfuse-core": "^3.38.20" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/langfuse-core": { + "version": "3.38.20", + "resolved": "https://registry.npmjs.org/langfuse-core/-/langfuse-core-3.38.20.tgz", + "integrity": "sha512-zBKVmQN/1oT5VWZUBYlWzvokIlkC/6mnpgr/2atMyTeAm+jR3ia7w2iJMjlrF5/oG8ukO1s8+LDRCzJpF1QeEA==", + "license": "MIT", + "dependencies": { + "mustache": "^4.2.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "dev": true, + "license": "MIT", + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lucide-react": { + "version": "0.562.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.562.0.tgz", + "integrity": "sha512-82hOAu7y0dbVuFfmO4bYF1XEwYk/mEbM5E+b1jgci/udUBEE/R7LF5Ip0CCEmXe8AybRM8L+04eP+LGZeDvkiw==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/markdown-table": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-expression": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", + "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", + "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "license": "MIT", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", + "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/motion-dom": { + "version": "12.27.0", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.27.0.tgz", + "integrity": "sha512-oDjl0WoAsWIWKl3GCDxmh7GITrNjmLX+w5+jwk4+pzLu3VnFvsOv2E6+xCXeH72O65xlXsr84/otiOYQKW/nQA==", + "license": "MIT", + "dependencies": { + "motion-utils": "^12.24.10" + } + }, + "node_modules/motion-utils": { + "version": "12.24.10", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.24.10.tgz", + "integrity": "sha512-x5TFgkCIP4pPsRLpKoI86jv/q8t8FQOiM/0E8QKBzfMozWHfkKap2gA1hOki+B5g3IsBNpxbUnfOum1+dgvYww==", + "license": "MIT" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/mustache": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", + "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", + "license": "MIT", + "bin": { + "mustache": "bin/mustache" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/napi-postinstall": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.1.5.tgz", + "integrity": "sha512-HI5bHONOUYqV+FJvueOSgjRxHTLB25a3xIv59ugAxFe7xRNbW96hyYbMbsKzl+QvFV9mN/SrtHwiU+vYhMwA7Q==", + "dev": true, + "license": "MIT", + "bin": { + "napi-postinstall": "lib/cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/napi-postinstall" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/next": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/next/-/next-16.1.3.tgz", + "integrity": "sha512-gthG3TRD+E3/mA0uDQb9lqBmx1zVosq5kIwxNN6+MRNd085GzD+9VXMPUs+GGZCbZ+GDZdODUq4Pm7CTXK6ipw==", + "license": "MIT", + "dependencies": { + "@next/env": "16.1.3", + "@swc/helpers": "0.5.15", + "baseline-browser-mapping": "^2.8.3", + "caniuse-lite": "^1.0.30001579", + "postcss": "8.4.31", + "styled-jsx": "5.1.6" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": ">=20.9.0" + }, + "optionalDependencies": { + "@next/swc-darwin-arm64": "16.1.3", + "@next/swc-darwin-x64": "16.1.3", + "@next/swc-linux-arm64-gnu": "16.1.3", + "@next/swc-linux-arm64-musl": "16.1.3", + "@next/swc-linux-x64-gnu": "16.1.3", + "@next/swc-linux-x64-musl": "16.1.3", + "@next/swc-win32-arm64-msvc": "16.1.3", + "@next/swc-win32-x64-msvc": "16.1.3", + "sharp": "^0.34.4" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "@playwright/test": "^1.51.1", + "babel-plugin-react-compiler": "*", + "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "@playwright/test": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-readable-to-web-readable-stream": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/node-readable-to-web-readable-stream/-/node-readable-to-web-readable-stream-0.4.2.tgz", + "integrity": "sha512-/cMZNI34v//jUTrI+UIo4ieHAB5EZRY/+7OmXZgBxaWBMcW2tGdceIw06RFxWxrKZ5Jp3sI2i5TsRo+CBhtVLQ==", + "license": "MIT", + "optional": true + }, + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/oci-accessgovernancecp": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-accessgovernancecp/-/oci-accessgovernancecp-2.124.0.tgz", + "integrity": "sha512-qintHXPVFKTxe0uwK4UOdAzHwXVMQw1/hZQ44rdLdp6RxDEa7VhwQmoRptODzpF0TK8ZZADPpBfngUmWRXlHGw==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-adm": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-adm/-/oci-adm-2.124.0.tgz", + "integrity": "sha512-cl1RfhAXfvhYXQqDawJsnwCRS2eX+W0khPM6KA97FroFVqrYRmS6RAb7XgKv/k0KXbFxBzBddymH6/eG0N+UQQ==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-aidataplatform": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-aidataplatform/-/oci-aidataplatform-2.124.0.tgz", + "integrity": "sha512-hf5PsAlMmX/hcsnIzRIhfxwzD4jE0Eb8HtQ7R9IKtlf9v+f704/PXamHWihjKQhFVlC1U80/OuBim5/UFumsjg==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-aidocument": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-aidocument/-/oci-aidocument-2.124.0.tgz", + "integrity": "sha512-KM5TgUXlmaG3IOpnbGjBF77uO0fx3SQAiRogZ4CgtG0TJM92v+F/ngt9Fnc4gsuuHeKwO8IblvD6zSJyS2ctFw==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-ailanguage": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-ailanguage/-/oci-ailanguage-2.124.0.tgz", + "integrity": "sha512-piQPOCP4TGrasK6hj+UN9xPk09WB9/HQKiUE24wIBqP6tsaX5sddurGQ/2UG8xedWIL73M0ux6tT/TdOaCh7ag==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-aispeech": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-aispeech/-/oci-aispeech-2.124.0.tgz", + "integrity": "sha512-acRgFcis0aigeMx4K8nH+3QtjvsvYoP49ENMC9KQUIKrIwuGuxIw9Nx8yTXfpYHbdbOUFG9W2lTiwhXJIR6otg==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-aivision": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-aivision/-/oci-aivision-2.124.0.tgz", + "integrity": "sha512-jvWupWsFTNoxX9Z13dM6GeEC6sjX1fPu1TwZD8TwVQkh7l+n75+NiPYwnKSQLDkF8AiJyq3wGOcoaIR6mKvFKw==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-analytics": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-analytics/-/oci-analytics-2.124.0.tgz", + "integrity": "sha512-1lkUvB5APQix6dHIqlp2S+bZzTjwxPuCVG5z+ngZKpLfzZcp2Zlgy/YuFzyQ14xH00wvqDT354DSQFzp/q3Bcg==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-announcementsservice": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-announcementsservice/-/oci-announcementsservice-2.124.0.tgz", + "integrity": "sha512-bF3lpJn9bqBpLf4pptWE8Nc22iiGhzbq1ioCQPvj70ca1r/87dufl05N7hf8Li+Ae6h+QW9df0LZpqAipdAujQ==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-apiaccesscontrol": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-apiaccesscontrol/-/oci-apiaccesscontrol-2.124.0.tgz", + "integrity": "sha512-dsI45AGCKVZrKJxYvT+0otXkJ6H+iWFB9GPkeGMuus2k5mBn4OtbTC83xV/q2/hBo3NVj9b5+2yfQRCpigSpYw==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-apigateway": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-apigateway/-/oci-apigateway-2.124.0.tgz", + "integrity": "sha512-nfahzUKkKrPAW00hx7ABTDCYJWbBHEHovmcGKPQmXqevN6tib59yUEcTbdQaw7j78PhkEiu3T58jQWW9FXmA7Q==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-apiplatform": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-apiplatform/-/oci-apiplatform-2.124.0.tgz", + "integrity": "sha512-druvXjR9wy23ozgUUE7sD0zsn5rY13bxwfdaRwkW0EZB3dBWthh9Y9WjpnTJ9KQiyJ+6FCmmuHfhYDZzwIPIig==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-apmconfig": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-apmconfig/-/oci-apmconfig-2.124.0.tgz", + "integrity": "sha512-EPyF3bS8UgrQvqjT1yo8TKt6JkMUFLsx32yt61GcFO/UHdaWdda94KS/4DlMsy6apzAi01bAtnoLXWVK8EIFCw==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-apmcontrolplane": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-apmcontrolplane/-/oci-apmcontrolplane-2.124.0.tgz", + "integrity": "sha512-ilUOui5D8WFP4ggTEgCjTtdZmAkBy+eBGq3xdeUA/k5yvIhQFh2yOHx6b1HAp3ELDvoYIaCtUzxN7lb2E23VWA==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-apmsynthetics": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-apmsynthetics/-/oci-apmsynthetics-2.124.0.tgz", + "integrity": "sha512-jJDFyeA3n/RjX2LcAnYAe+qgMi5+Ttt0bx7X/XwEKHmZbKoa66OV2CV/bIEuT78sZXQB3qQxv3y66Li0yzMI9w==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-apmtraces": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-apmtraces/-/oci-apmtraces-2.124.0.tgz", + "integrity": "sha512-VyZHobDyeqW3Jd3dok3qxFc4hYqbhEwofCvjh/bz29Q36ww1E5xIV6NjIUQwutSD0jZOwVPtNd1/QLjR3P++iQ==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-appmgmtcontrol": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-appmgmtcontrol/-/oci-appmgmtcontrol-2.124.0.tgz", + "integrity": "sha512-ZapRMBIutYki1CN4b3LG+GyBpfleVfhN67TolzpocW5FRvNL7IcDiJKWP0fWsSETUIen5ATxutrRu8E2oRAkBg==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-artifacts": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-artifacts/-/oci-artifacts-2.124.0.tgz", + "integrity": "sha512-aQvIU37p4HN9N3oxI0KQXOggRnZPX+mjwcUZilD0gvHRj5yOK9M6mC5+5k4CWGukjW9JmOux3RRpDAkPpIT50A==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-audit": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-audit/-/oci-audit-2.124.0.tgz", + "integrity": "sha512-8f1b/1HZu5UiIXxn+toGVp00XmBeruOSMD58DqsDSE+f4ilX5nGUgJoPpb5avZiLLoT9MiBObWe1zz1Rx18jAw==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-autoscaling": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-autoscaling/-/oci-autoscaling-2.124.0.tgz", + "integrity": "sha512-xLWzohC7B80Zli3qfzFGZNkk8rRSn2GkzE1Ivmu1U1SIwQmbht2jgdOI6OsqT1Tr0N7eqAbCykzGFcrCt+TUzA==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-bastion": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-bastion/-/oci-bastion-2.124.0.tgz", + "integrity": "sha512-jvlmmeq49SeybJZyhUyykynnIdOdi8BRfVYr6714fdwAV7FCbe8cRyx8YHLCuKpj/TOCE1yMJiOpuE8rPYy4Sg==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-batch": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-batch/-/oci-batch-2.124.0.tgz", + "integrity": "sha512-wuPcTa8k2+SQW71k5fVSEiYi0cY8fD8T+mPJl3+TxZ2W0u9oPPlAiIM4QrSKdOXEcpJWFsnbeB1uS7JR1CsdLA==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-bds": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-bds/-/oci-bds-2.124.0.tgz", + "integrity": "sha512-vn+edJa5zx7KgtP0/+fkzXxUnsMsekTAeV0ut6EIcCHrFUJDV18J1xGk44ZDg1o7xENHA4ddnQxAc3b3xU4jVg==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-blockchain": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-blockchain/-/oci-blockchain-2.124.0.tgz", + "integrity": "sha512-7+r2yWVzyW219CDKFvfnMiIOhxdgLeUGj4rro4d1cBPs3RvTaDUjEc+7pcKf7XVCso6LpeY3PY4ZVQuHAcx/ww==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-budget": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-budget/-/oci-budget-2.124.0.tgz", + "integrity": "sha512-y68B3xLaTLCCwYgHLvNBgR18CzyxAso02Oe1AJR7NqRf4E7yijzlw0U02u1XmZ1GlWFoiGeQWrC3BNaZLZ5hvQ==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-capacitymanagement": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-capacitymanagement/-/oci-capacitymanagement-2.124.0.tgz", + "integrity": "sha512-Bt/e95pu0PUgJ5OQhddLMY0W0ULQFxBEf9/ndMq6RoMI44G9OnEhZKqby8swfhYkXh1LYpw94TQHt0XmWqu1aQ==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-certificates": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-certificates/-/oci-certificates-2.124.0.tgz", + "integrity": "sha512-UGrS82fMFF3/7HsYnG3B+MpHRHbCwkG2Hy0DIZ6Z5kRioSgxnbsxZxkzfdoHfyTDEZOepK0BqTcIItzzvWaRMA==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-certificatesmanagement": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-certificatesmanagement/-/oci-certificatesmanagement-2.124.0.tgz", + "integrity": "sha512-E7wQI/ewynJZsrWLYoqxtS3T9JDACIC+ohybC4+o8Yy2cQmgHzy1OMVdsSznERm94oE77Vi4d0not9sR4r3G4Q==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-cims": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-cims/-/oci-cims-2.124.0.tgz", + "integrity": "sha512-c9AmpOYWIAdrDJY8aHtKcpq7EhzlGW+Gpwa/N4vjDdRFns72AE4YX6/OsqY9U+/GSrTjpOKR2XXJOXGQ3z94HA==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-cloudbridge": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-cloudbridge/-/oci-cloudbridge-2.124.0.tgz", + "integrity": "sha512-9mfn8cwh1Xc/7A+xkh0LttX8Uw6QY/LcWGVkHBzoLdU3d0WTrM2YcYKhZnzDo31TIqs7xhHr/bguZ3SEHxtYBQ==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-cloudguard": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-cloudguard/-/oci-cloudguard-2.124.0.tgz", + "integrity": "sha512-3kNuHP9+nIPFzsSdXSY6BSIIjlOZOeuE6Dn32sGARaOf4orXK5XD+hQkHHrHudw1TG9spwRuwvMNsT116wPNoQ==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-cloudmigrations": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-cloudmigrations/-/oci-cloudmigrations-2.124.0.tgz", + "integrity": "sha512-8o5LrbRQ8O/xJxMQem/rqpXHmPsCRrOJyITB70Jo/8EbglNRsUBZzgx/5kupv0MwiB7pjU7evcQHcVPk/IP26Q==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-clusterplacementgroups": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-clusterplacementgroups/-/oci-clusterplacementgroups-2.124.0.tgz", + "integrity": "sha512-HM3NG6A5ZYoPSDO/LDn5NOP76EBrIxu+ZGTiQFyvksW5NEv9nIyunfesqUVVBgjxol9Mo6l+5qrh5x8ipSnLPQ==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-common": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-common/-/oci-common-2.124.0.tgz", + "integrity": "sha512-DUa5dL4ZZShDchDrH5TWpPJOJ1IgHvhE5EUvmkYJT4Uz727ncxE3KK+ZhjTlwikzfCUAmEojUV01/WUsC/5JlQ==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "@types/isomorphic-fetch": "0.0.35", + "@types/jsonwebtoken": "9.0.0", + "@types/jssha": "2.0.0", + "@types/opossum": "4.1.1", + "@types/sshpk": "1.10.3", + "es6-promise": "4.2.6", + "http-signature": "1.3.1", + "isomorphic-fetch": "3.0.0", + "jsonwebtoken": "9.0.0", + "jssha": "2.4.1", + "opossum": "5.0.1", + "sshpk": "1.16.1", + "uuid": "3.3.3" + } + }, + "node_modules/oci-computecloudatcustomer": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-computecloudatcustomer/-/oci-computecloudatcustomer-2.124.0.tgz", + "integrity": "sha512-IKi6pdvqvur6mCQ6Yq3DU12C1J6mUf0jEzTKm+no+/23hfKB2uABTb55ENuvcYpgiKU0mdbE4UeR0A8rupzhVQ==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-computeinstanceagent": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-computeinstanceagent/-/oci-computeinstanceagent-2.124.0.tgz", + "integrity": "sha512-H4TECF5AvYji2h3P6rvDtNw+ZvGD7D5bEC0UKDbvsm9cehclSdT4TziQ/iTsiQo7kh+bok3+TNjKr+t3fsbQjw==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-containerengine": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-containerengine/-/oci-containerengine-2.124.0.tgz", + "integrity": "sha512-pQt74cScq6uyjZeVh33vx5+o0TZPuFA0gUWvqi7v1pQpFNWSH2mSUuWyS4suqa9fBcqw1mPuXoCQb/bG4u25Xg==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-containerinstances": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-containerinstances/-/oci-containerinstances-2.124.0.tgz", + "integrity": "sha512-CMipNUp7kmZCIXYEqdYtpiVom8sx+DuoCtxXdrHtaCqy+UUB3pUTTC62wMCCB1a/3Iygx4uzWlwb5qnHcyJS0g==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-core": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-core/-/oci-core-2.124.0.tgz", + "integrity": "sha512-CAlR8+ewWqKwpUqGcee3DenUpn4xRerOfiJlevY/58MCws9kexHhHDPrOztKq7uKZoaw0ZGKrx6stqnOHas2JQ==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-dashboardservice": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-dashboardservice/-/oci-dashboardservice-2.124.0.tgz", + "integrity": "sha512-RzurI2ZAIzd1ocC08nPcovvfGW7rVOSZIV4wRSRFO0q9h6n+E6vLNeGBOjXGHkL7m5f0c/NPvoGsXiYaawFY8Q==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-database": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-database/-/oci-database-2.124.0.tgz", + "integrity": "sha512-1/smSyJjC0XG6zIeikeneHV7lrR8WSrngzCBxB2RuG3She1GXudCuiY4YwJi+syZXQgu+5s8l8st9AQUV3S4TQ==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-databasemanagement": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-databasemanagement/-/oci-databasemanagement-2.124.0.tgz", + "integrity": "sha512-2iGQmkgxbZlZHwo/xrW7NtdH2uwWDg3EDceMdLNN9NKz0J45TgM2Fh9iDtLDUHRTf4EOu9IeCQbUnewMSqL3hQ==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-databasemigration": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-databasemigration/-/oci-databasemigration-2.124.0.tgz", + "integrity": "sha512-hhHSqQr2HIYwqy2hxya4GIaAAxY8eIQ5GaCjuDFCrFayZ+MvOBlIdnDL5T9QONorDwNhmtMCYcYC25ySo/WUYA==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-databasetools": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-databasetools/-/oci-databasetools-2.124.0.tgz", + "integrity": "sha512-a41VAnulAsnCHclY5E3Tq+jiSKlHuGhJ2Kq7jF2Xrb6TiUWTgzd+xImJ6DCXBqPrD9GAlaXoND6HK6iRM0o1Pw==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-datacatalog": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-datacatalog/-/oci-datacatalog-2.124.0.tgz", + "integrity": "sha512-EOSuvvjjZ4IxStpI022RoUVwVz0ia6X4yUFKBOcvq7UWeXJl/1Vh6YsBzFWlucgC8outmkadd4juTQa0l54oMQ==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-dataflow": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-dataflow/-/oci-dataflow-2.124.0.tgz", + "integrity": "sha512-pTEza/TZmfqOQ1ssqtsYxc9NtNWDsm6NGtJ+q3MgOISul0oMte+/BWJ8rrndrSL+XVgPyHiFZpuCLvG0sgRQBw==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-dataintegration": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-dataintegration/-/oci-dataintegration-2.124.0.tgz", + "integrity": "sha512-hIo9BY04G280A+NZCY5+nzrBEXwMCYzNARPBhM1v5hj5z1tCOGhYWPZZWCpHU5b+bynm/KlCWGN6AEByO5UkQg==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-datalabelingservice": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-datalabelingservice/-/oci-datalabelingservice-2.124.0.tgz", + "integrity": "sha512-n1qxcnDSYJJPdL6MoeMjZxhwo0uqfxWXESDP8zh1EHgqgA85tNlcHL7Z9OgArHZSX5nWa9NpTzhWK9rbHNAT0g==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-datalabelingservicedataplane": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-datalabelingservicedataplane/-/oci-datalabelingservicedataplane-2.124.0.tgz", + "integrity": "sha512-9irZ6Q/3aojvFCImDGfUdz6wtVdpItncfmG2ighj0Hb7ZHB7YrdX1D5N1XpltWhNLs8QHOXklocROYkMGVNvJA==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-datasafe": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-datasafe/-/oci-datasafe-2.124.0.tgz", + "integrity": "sha512-jLTToyTRpdx3kZgWUZwB4BdtlIgIvmEbjoT8t9nTpOqGe4PrvIpkx3Fh6cQep9WgQjrs1cC0Wt7Gj3FARJtryg==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-datascience": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-datascience/-/oci-datascience-2.124.0.tgz", + "integrity": "sha512-0PPgymZ3vVR5kY3jC3W+PR6hzrM+Gy3OHCUYljT0eCu1h/7qjlIuKmfB0J8K5cuEw/gWYj0dHQzG1/s3OrzEig==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-dblm": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-dblm/-/oci-dblm-2.124.0.tgz", + "integrity": "sha512-/Oxosd67qiHrIpQk8cycuoIvK6KTvQO+vSzaaiDTUnNYkxjYjC00n0NXr8ypnAaUAGa6eRYw1DB5lN3mIKDxzg==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-dbmulticloud": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-dbmulticloud/-/oci-dbmulticloud-2.124.0.tgz", + "integrity": "sha512-zzhd87wrAmqI8bStlT2Yj2rYyZi602fuKcwuBmU2caoeo7+UEZP5fSht7pJE1YVdAJq28tYqRSlL43Nwh865/A==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-delegateaccesscontrol": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-delegateaccesscontrol/-/oci-delegateaccesscontrol-2.124.0.tgz", + "integrity": "sha512-sQ+Qu8pmIz3mY+A+sX6r6B3xXXxZU++vTN5u2jdqUEZRrZQBxNzoEk0knm/Lw8F4O3lxyS1KjSprrd7uJki7wQ==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-demandsignal": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-demandsignal/-/oci-demandsignal-2.124.0.tgz", + "integrity": "sha512-3kykuWMs6F5abml3Tvla/Y7gzWg64xynA0LDv33VRW76kMZb18lDKCW67YlT68Gv9O/jYJMuPmp8K5iMvXAA6w==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-desktops": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-desktops/-/oci-desktops-2.124.0.tgz", + "integrity": "sha512-uTwGAEO4xADwtcP+aa75FJfXkAvm3a1CX1xEAd0XThlxERR17bYaOLa0lyKLSc+BXlNZHGa/KYRev5dhGofMLA==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-devops": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-devops/-/oci-devops-2.124.0.tgz", + "integrity": "sha512-uD2Byd1PmvUV+izYwxfGH/o3SE/xn2ciSnTWMT/+3c8EoTvtXEgVkcFGIJZIZiFVYzTYob0zkfUxeWCpv03yKg==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-dif": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-dif/-/oci-dif-2.124.0.tgz", + "integrity": "sha512-ys2C8w8+3LkEMsg9xOAzc2AwQ07ldIyWMMlQj0JDpMq08KNT6ASuwpLqzfvCJ1iNnZbuQ2/cbgfXW/dMflOEZA==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-disasterrecovery": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-disasterrecovery/-/oci-disasterrecovery-2.124.0.tgz", + "integrity": "sha512-l8Uh6VhvKW5N1XpmV5TBuchQcHiRwWCdh/5qLgBkxoGrbpW3nvm5bT4/B7alOqaRgMhtdua4JCfImWK37kdDfA==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-distributeddatabase": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-distributeddatabase/-/oci-distributeddatabase-2.124.0.tgz", + "integrity": "sha512-fSyoZrlV7lS4wFNv8MpBcYv5q2DZuK7PyYZt7T9nMhlplRppkDqwY8RDmfkmitbSLHKB5kRQjWLjbLsFUpBfww==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-dns": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-dns/-/oci-dns-2.124.0.tgz", + "integrity": "sha512-JjhhXrW3JjkPag9ObdCHprL2xrXUf/l0XY3ZRrJ3JM+FKNI5aJSqLw6R7YcDwgpD/Rj9A9yvJhatyAZL+anRyw==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-email": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-email/-/oci-email-2.124.0.tgz", + "integrity": "sha512-UddYs/bgWN3KGYIr0XwcpBXRQALU4KBEtnEGU4pkrB02jUTktpNMOiY6dZ0Ehwv5mcNN9SzZQvtXlcoC/acxjQ==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-emaildataplane": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-emaildataplane/-/oci-emaildataplane-2.124.0.tgz", + "integrity": "sha512-r8lM2OAKxZc+XAnMk76oMVTd+GXQtuQbuDZwB6OMRmJdW1q1j5/q4DlfIF60AjqOl2pKqW40Z3j8J3W/Y9Xu5A==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-emwarehouse": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-emwarehouse/-/oci-emwarehouse-2.124.0.tgz", + "integrity": "sha512-+leP3RKxQxW4hE4vz9pv/aiP4aFRQCX0hH6QzPMlZ14qSW27M5NBsWh+HGLa+qegk0GWhBGohGUi3OKO9aDPPQ==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-events": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-events/-/oci-events-2.124.0.tgz", + "integrity": "sha512-5jrsfPKJfX8/wHVdcOub5Hfbxv9xGKPrGNfjvWltT5lvvIw0ILmFi3cEMBD8KDYRY8Z0T67G1RN9Z2LWIOHE6g==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-filestorage": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-filestorage/-/oci-filestorage-2.124.0.tgz", + "integrity": "sha512-bShh5qG+algLk7ZI+lRsIaDjj6/OExBZnlURA631HXCQGYg6VNmDhe6MPjgwSUC+Yu9AgP2WUsrJaGzGwMcm+Q==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-fleetappsmanagement": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-fleetappsmanagement/-/oci-fleetappsmanagement-2.124.0.tgz", + "integrity": "sha512-EfjmkjGFBuHcHgkMrNkJTvBISgE3xMvAOVXA1pBRjtjrkOk2jxHAg6Apf3IasMVV0c+t4GYPv0GrrZJ+heJCdA==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-fleetsoftwareupdate": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-fleetsoftwareupdate/-/oci-fleetsoftwareupdate-2.124.0.tgz", + "integrity": "sha512-7IfoCtdGMMLqC0LO/VF9lOjEYuDisSFgrnXg1BiTZbvFMg8jJvOF3u5M20V5JiExc9Bs+TLplxEsTvQxtXlZLA==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-functions": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-functions/-/oci-functions-2.124.0.tgz", + "integrity": "sha512-Rk4kcKBj9vgpECTwnH66CihTohsnV55GERSVAUwTHnjNnDWi79usraKzVrv3UOp50mCLChjbEbpJclwkWIKJyw==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-fusionapps": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-fusionapps/-/oci-fusionapps-2.124.0.tgz", + "integrity": "sha512-zsLY7M92SUi+7eNCNM92Bq9n+t8kXVKhwAUHyJccX8vNc/2Mbbci7fFJWw2AAR+smKtTTGpMN/MKe5JkAAFthw==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-generativeai": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-generativeai/-/oci-generativeai-2.124.0.tgz", + "integrity": "sha512-qg3dJz0zTcrD7nb5tD3OhzlUfJMzBP9LfqZIFEFuK3g8659rIQq6xD3h+U51cXh4gfkspCNqXYtckcA9PuBzmA==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-generativeaiagent": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-generativeaiagent/-/oci-generativeaiagent-2.124.0.tgz", + "integrity": "sha512-kbSS4I7fg5UmVh/zSp4kOTsp3OFkJbCkoCJCvs3vWcCv6ZwRkmDdDEwtSJ+GPcINv0grT4zuMcoaBLnnZgP1eg==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-generativeaiagentruntime": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-generativeaiagentruntime/-/oci-generativeaiagentruntime-2.124.0.tgz", + "integrity": "sha512-IeZ8hePxv/kX7+YO6rsL9AY8o2f/PEaunvOzMs6pvcDMz16c4fXuxIooSM9lsfBqtPDCUTyAGIK4sjCS0JQ3LA==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-generativeaiinference": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-generativeaiinference/-/oci-generativeaiinference-2.124.0.tgz", + "integrity": "sha512-no3g9qR1Lxh8kA3P3ufbb0O7dJVtNJ5kseZn4rxhfNOQ8BkmdduKdcfSwKuxPUtb7yx4r4AYW7YrIYCIIylJiw==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-genericartifactscontent": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-genericartifactscontent/-/oci-genericartifactscontent-2.124.0.tgz", + "integrity": "sha512-eWW+QZEaSw8y0Hy/kpIYjt3DPkdHYmDo0R3miO2q2SzqUcUvXpYab1EA5IvKYVa6NjKCWnAnBe15AnJuabPReQ==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-globallydistributeddatabase": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-globallydistributeddatabase/-/oci-globallydistributeddatabase-2.124.0.tgz", + "integrity": "sha512-1XY8Nq+pD861tRphnpG2VvWMSrr3dxKbhsKgQfJWXpwncQXDrv2udtBRKbskCgKZkZ/tHsLXmtptUSNjjjwwoQ==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-goldengate": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-goldengate/-/oci-goldengate-2.124.0.tgz", + "integrity": "sha512-e8bgV3PHHDmYlBDE+Qyp2mJNdpxQ+Km+0y4BD97EhABLJcMGi8XwQss2pVduUtxOoC9B6NLJuFA2eVoQemoBdg==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-governancerulescontrolplane": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-governancerulescontrolplane/-/oci-governancerulescontrolplane-2.124.0.tgz", + "integrity": "sha512-XrXBFLIwJjqgJnGbpVscZY2/R2Ew+k4Y1RpALM68q7pU3vkW7YwZdS/DUXTIe3pC9rthxjsrhvgxtozihH8/ig==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-healthchecks": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-healthchecks/-/oci-healthchecks-2.124.0.tgz", + "integrity": "sha512-X7wQyue8C0D5jyvtVAG39SYkAbzAmcP6RZtJPGI5pBBboFORrSHpoep6+dliwhlr7N2WFuJi37gkt085YIlK3w==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-identity": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-identity/-/oci-identity-2.124.0.tgz", + "integrity": "sha512-gvCei21eznMNMnYptup4JKOASGlouNhimyA4bvzGkWYhJJXGIxhLNfeu4tOtbD9RDzf/guYOZlB4wdNxT+CN/Q==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-identitydataplane": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-identitydataplane/-/oci-identitydataplane-2.124.0.tgz", + "integrity": "sha512-2XIE1sADb8uzSA2uvGSLPepjlTdZeU5KhF66QIBKBQmmW/GQJgC8+vbhWZu6X94xbfnug1PQh314lPTf0WvrfQ==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-identitydomains": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-identitydomains/-/oci-identitydomains-2.124.0.tgz", + "integrity": "sha512-JwZUTfWluOgz3g1fgn4XWJARe53disa7b9DjVvUndN7DmyZrP25bjwjgL9X8aQrxyVOUw0fBxfB7bIeJsdMJ4g==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-integration": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-integration/-/oci-integration-2.124.0.tgz", + "integrity": "sha512-oXDcphF4xdSLsx0Q9QjADI9vwZZ6dao1xGXbhTnVPB0TE/xl1Ds0uliNZCeXivZEi/UF2edZoRWGuozYiWNpfQ==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-iot": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-iot/-/oci-iot-2.124.0.tgz", + "integrity": "sha512-fmcvV5n/g82Z4GcK9LKqOxJLdRz44I6CMc7O9zB9TJvM7KoHJQN26jgNrhDAujQzxtT0ApVHBCMFk5HivEcDqg==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-jms": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-jms/-/oci-jms-2.124.0.tgz", + "integrity": "sha512-veR080g/pDStz3li95BvqsW7bJLN4NZ2700uweITj72+RzKdiN0Zl5Hrz1ZVUW/IO/A0IPFyioSFXyp0HWxEFw==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-jmsjavadownloads": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-jmsjavadownloads/-/oci-jmsjavadownloads-2.124.0.tgz", + "integrity": "sha512-Yfke0LjVrkVQMybr1uDLtH94YGu40WS6kMMl33+Uk4GZ7WjeaadpezkLf3VlSlOod7wRM2SPHuINOL3NW8eYkg==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-jmsutils": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-jmsutils/-/oci-jmsutils-2.124.0.tgz", + "integrity": "sha512-rFKT9I11Weookvs4jfMIOKMXKQEZ7Tn9QTNufTwyP3Ql56WjQo6jUzLIJJPNDUPH+gegva6qADCVEnLo3YPSPQ==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-keymanagement": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-keymanagement/-/oci-keymanagement-2.124.0.tgz", + "integrity": "sha512-K0/EmSeRp/I3r4INxQzrglFec5gLS5VV45HzhUSa6awz61mNMrA6pAX5qQHcjf93wcu4/Yexu5HIi0J0o9n7vg==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-licensemanager": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-licensemanager/-/oci-licensemanager-2.124.0.tgz", + "integrity": "sha512-OWEDP2YyhSiaedVuzNCAKT/NPUve2N0bvzo19ou53DuNQb+lYFPwObr7hrvip3IiT3ImZuK4DdORcJi7f1LpSQ==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-limits": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-limits/-/oci-limits-2.124.0.tgz", + "integrity": "sha512-7xJLOQKY6egILpB1LaoPhd6/+0Ndyt8QxtbqHU97THqwbaZrvt+U8EFs+kb62+5NYnvsYrW5dihHt8Xv0OIA4A==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-loadbalancer": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-loadbalancer/-/oci-loadbalancer-2.124.0.tgz", + "integrity": "sha512-sLgV7xXnQLZlIv4u4rxZTKAMbXjYKxb5mRuLYs7b982Z+kpCE4mk/cGfQjhdfsT9gS3Wuwo3+4oJpQdwcuGJLg==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-lockbox": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-lockbox/-/oci-lockbox-2.124.0.tgz", + "integrity": "sha512-ameB+nBHVW81n0WQufLjw+4BgcjpbifFxhcemgS+DG1q+iIhlEWv1GYobTXRQW8MET5+TDRs+rm1rYwAOzIlZw==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-loganalytics": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-loganalytics/-/oci-loganalytics-2.124.0.tgz", + "integrity": "sha512-wgPGcrCha88RsRXELd27S4R7s2ZCwJ18hDxOxopLYnak8PT4gLKxo7E5wfAJzsuJDGEoNtEsoq0JzwmPH/uttw==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-logging": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-logging/-/oci-logging-2.124.0.tgz", + "integrity": "sha512-kyxEES2LyXDquabJips7PUI+EMDnRP2iNE9lCyx2k8KqR7I1+AfM2NN8syIZCGemd09iROCNdpv0TNFFZFQ5WA==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-loggingingestion": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-loggingingestion/-/oci-loggingingestion-2.124.0.tgz", + "integrity": "sha512-f72/qvOIRIFWsyU9Igx/Lx3FklNlUGYzCfTkrkrHb2AfwAk0ganOZ203wpJumt2LmmxLmQ/bJdbZzfwVp4MbKg==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-loggingsearch": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-loggingsearch/-/oci-loggingsearch-2.124.0.tgz", + "integrity": "sha512-ksBIvfx4fDKKcAU2A9plXcNc4YOy8T37jj3cYhQVtUStB9W6eLgg+w/KBJGEC8t6ywObZgbH6mmS2fePspTVMQ==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-lustrefilestorage": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-lustrefilestorage/-/oci-lustrefilestorage-2.124.0.tgz", + "integrity": "sha512-A17HHBCho7+k0hpLMUKL0HHcFiqTW+3Ti8bRCliq98W0aXvfBl9b7YfUYZuTFDV91yPKOvifPgKg15E6/NBM1Q==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-managedkafka": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-managedkafka/-/oci-managedkafka-2.124.0.tgz", + "integrity": "sha512-SK+VDzfC+9o0/9X/ESPhRzFU3silg2hs5qaRDBfV02c7D/Q2JIfQyeuoPrJlyCGoPpSS2OpgbkoV82tRX8RJsQ==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-managementagent": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-managementagent/-/oci-managementagent-2.124.0.tgz", + "integrity": "sha512-bySkKzjBQO/0QrGHuRbL9lJVRewFScdnvVzqQs6puLkpDH2c4lKEzSoe5WKvsURJrxF8mioTAet68BOzPulptg==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-managementdashboard": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-managementdashboard/-/oci-managementdashboard-2.124.0.tgz", + "integrity": "sha512-a5RGPXeQGJ4NMkBavVpwdnqp2R2nSEjDfK0PgSKQ0zvGH0D2WNNsTC+OgKToZM3u9chPBt3cO3irc2VJqSyLYQ==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-marketplace": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-marketplace/-/oci-marketplace-2.124.0.tgz", + "integrity": "sha512-ZE0gxlmKcVKoTDUJNcgyzm2hFRKG2aGKWv4AmqpnYBoGbOoNSiFyV10OuaWULuKXpnE73fCmWV2pr3p7gbndMg==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-marketplaceprivateoffer": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-marketplaceprivateoffer/-/oci-marketplaceprivateoffer-2.124.0.tgz", + "integrity": "sha512-M55S7k5tH1sjS8XnO++dRwckqPU1zZ4fPko7zNTHFtj0IEjLpZAuRKDuL7Q8ImR+H60KW9NesCn5ezI1d6qeTQ==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-marketplacepublisher": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-marketplacepublisher/-/oci-marketplacepublisher-2.124.0.tgz", + "integrity": "sha512-gr5/8syNHET806B1RjC+0zpyuAmVcDwxUjyV4TJbhytfeJ+WOX8eddaGDYLeXob2IxWUh6BL0vZxo+5R5UOuRQ==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-mediaservices": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-mediaservices/-/oci-mediaservices-2.124.0.tgz", + "integrity": "sha512-b5KA9Xxy/3hd7auur8FVo32cfAtMXCVqy5Ugop/SgQwFSN9jxwweJdAC5BR/v1x7EGBR7t7KpwjMGg+qhRnAaA==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-mngdmac": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-mngdmac/-/oci-mngdmac-2.124.0.tgz", + "integrity": "sha512-wSb7C7x7C2+4sPkv6MbpiVFtKFFVgkzEqWRXsAYWeeeE2quz7JWjUprGJ+/EJ54juNJRfOzRvKOf0iBnKyJVEg==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-modeldeployment": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-modeldeployment/-/oci-modeldeployment-2.124.0.tgz", + "integrity": "sha512-8+qjoAGcv6vQ3C402JQAhzfHhwNicqKCwEPbLt8Tmwu/1rkJpBFU0BeB9AzxLyjyCu6EgIN9YkRTlG5QzvA27Q==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-monitoring": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-monitoring/-/oci-monitoring-2.124.0.tgz", + "integrity": "sha512-kHh7XBHV2I39Mq+50leMqABozBKsrlZ5OS0DvKYNAiJMb2A4W0B757t7ysBHnFq7AtOBgdYwEa09ctDDA6Kp5Q==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-multicloud": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-multicloud/-/oci-multicloud-2.124.0.tgz", + "integrity": "sha512-e+SdTRKNwJVYPxqVPKl0aZPZ9jHtzHI2in+DxNmN45xY2mT+2qLwL4D9VVmT14dko5g/XRCdMu+aQocK6HQOmw==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-mysql": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-mysql/-/oci-mysql-2.124.0.tgz", + "integrity": "sha512-euev5ciD4DLKUDllQcQ1QN6mlV1JbXC2TvO1WlCnrgpqCyRd4lNXXRM1XwXZCw0SApLDXmdHyNNpbdpEaeN+8g==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-networkfirewall": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-networkfirewall/-/oci-networkfirewall-2.124.0.tgz", + "integrity": "sha512-B+fSeePSrZ86/4w4J4Y+U698XnR/Gww3FvKgQ7RKzeOVv3JTL2nS9DrWE5LjuL9u8DYBdWLZpH0cOHBogp+gAA==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-networkloadbalancer": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-networkloadbalancer/-/oci-networkloadbalancer-2.124.0.tgz", + "integrity": "sha512-zpIoUwI/k4ZhU9d2HKC/VhB1UfTMBMnlVocwueb65IPNIMlM/24d67i+mHArtOqAHq4bBbdDH74BRgjfNqfokA==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-nosql": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-nosql/-/oci-nosql-2.124.0.tgz", + "integrity": "sha512-4ZQ56tfeLUQeR2OWngSA/HEQxECH4G0+9jkOGtAYcfaDesVsogGbtYQKdKA2Y4tuP+Z+tJTxRzSgwPuL3qVGuw==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-objectstorage": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-objectstorage/-/oci-objectstorage-2.124.0.tgz", + "integrity": "sha512-t/d+JGkAeF8ADnHPiGloH6KkIdvfnklElqBSDiuDfsqfYkwEZ2QbDQj8HaFoMJ4koV/YFW5jr3vbqaOUxXpFdQ==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "await-semaphore": "^0.1.3", + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-oce": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-oce/-/oci-oce-2.124.0.tgz", + "integrity": "sha512-ixEFgmkG5ImwEa6+OHTbMBzmQ/nIrlBTa8fj+6Vu16XUlfD04+X4f6/rHpwMt4HcyOkoA2ZtnyEQHkBzhLgVLQ==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-ocicontrolcenter": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-ocicontrolcenter/-/oci-ocicontrolcenter-2.124.0.tgz", + "integrity": "sha512-L/Gr0xOsiNq1vuavZybxFtPpaa0Ro5nYJHu+zLbkXRwWYytqNfm67z1IM4EsAbYG2PZ8sy6I1dWEvjKg9vizhw==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-ocvp": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-ocvp/-/oci-ocvp-2.124.0.tgz", + "integrity": "sha512-bCBkVoGEOu7ntqNKKamrqY5+WmZiae7ckO/cp+Cmq3oe341/TmOz/OZhOiyo8x8s+kXOWz4beaNqZ0SSR/cqog==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-oda": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-oda/-/oci-oda-2.124.0.tgz", + "integrity": "sha512-8kCx7EASBjhOOAnLgj1MkhXbOx3tfcNRU2OXDr3KKCJKIKskCwJVKQM6gL1DnAt3pYdIlWH09YXmqsa0BkpTmw==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-onesubscription": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-onesubscription/-/oci-onesubscription-2.124.0.tgz", + "integrity": "sha512-bOlJ8IeyRwHKVJGD9Je9bhFgMACVecAU+XFKaVkhJH5f+LR2Hmn3V4PxUvpDx1GWVAxpHyZIEvdHv6vp4b/Kow==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-ons": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-ons/-/oci-ons-2.124.0.tgz", + "integrity": "sha512-H1N28fqojkxTgS+7asd1q7kYag5LwEbD/kR+7raIvVPO27414xPA1eCDWjGnmU3IVVOGMdLintS4mZfz1CdWvQ==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-opa": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-opa/-/oci-opa-2.124.0.tgz", + "integrity": "sha512-mwI6ccA3m5F3UNPQt30Q+98ZTxoeZ3ROpzDHNLLMsS4M0rcKBr2aeX/JCzfW3o6xUoRyEtqz8n7LCchI0nCqpw==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-opensearch": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-opensearch/-/oci-opensearch-2.124.0.tgz", + "integrity": "sha512-vyNRi9GjGHkQ2jQpgssJ+Ij5+Lezc5Uc8jxEV2FQcoYujYwXJOpNlFMnlKQo64bAMXbdOrn6PBT6ANUJZoA5qw==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-operatoraccesscontrol": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-operatoraccesscontrol/-/oci-operatoraccesscontrol-2.124.0.tgz", + "integrity": "sha512-8AZNWniIGY71uS4UucKDic8piWmXk0cROGJVsTDsWGyVATys+92um5bv5ad2vF9nryvSCgJ7alJuvZmHM1SSrg==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-opsi": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-opsi/-/oci-opsi-2.124.0.tgz", + "integrity": "sha512-s9aeJnzg47/7O/1KH+PF5hxjR7BhUBwdA4KK2I4uzig//73RFKxau1JVLRcUG3H3oz1A8jyBs6gRLcX09GvCGw==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-optimizer": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-optimizer/-/oci-optimizer-2.124.0.tgz", + "integrity": "sha512-oU844ff50BHO5GpTr9NHrNvEIteqMVvKTgfSN/PBLXT+OboZ9iBx3VkG4sPlZikGwvftCbe/5LurdgCh0WhjMA==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-osmanagementhub": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-osmanagementhub/-/oci-osmanagementhub-2.124.0.tgz", + "integrity": "sha512-AFUz3Bo9CFY7EEjc5jF+PFQHuBVaDjwe5ElWmE1aVgTogpnhQ3Lcq9QRzZE9C5sNVPBZxs2Bw3zMfyidZW2v9A==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-ospgateway": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-ospgateway/-/oci-ospgateway-2.124.0.tgz", + "integrity": "sha512-vxr/Ikkhj254Ruh/75cJVzqhxwwtdV+xnIqNdGaUpaHwKY1q4eIVera/v4Drh3R6P2yrVBrv+b0bt/OaK4LWkQ==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-osubbillingschedule": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-osubbillingschedule/-/oci-osubbillingschedule-2.124.0.tgz", + "integrity": "sha512-ULoFq66MgDY4LLuRIC/3tc7juWboJM87NRtTT3K82mhcinzfyyKYPAhR/iYQhubftgm5XMLpmS7eUKDt/3qhmA==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-osuborganizationsubscription": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-osuborganizationsubscription/-/oci-osuborganizationsubscription-2.124.0.tgz", + "integrity": "sha512-OEA7tblqumqq/GgHMvLkpcdHWmkKFEjLn/discjpQpyRuhLv8dalEdZJXZzIyxsFjgeQvXrl0Ww2mJeDS0jjZw==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-osubsubscription": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-osubsubscription/-/oci-osubsubscription-2.124.0.tgz", + "integrity": "sha512-pxwUjRt4N5lqYBL1gN7dfqJEy0P5jauczhCW67TUSbRz/HY3PUci8ISWV8pZHfUw4Qk6QBLmtAb1wCTc8veBNQ==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-osubusage": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-osubusage/-/oci-osubusage-2.124.0.tgz", + "integrity": "sha512-KFcQKq4ZRyhxakYL699qy1E8upi0FfbQMbWM/DdPY1qWWszEs7OMjnluXRBmc62aGFFXUow1KOHpmwEUNHwfbg==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-psa": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-psa/-/oci-psa-2.124.0.tgz", + "integrity": "sha512-zg4k7GelDP4s7x3gj7M2mduvjlELlCx8Drdhz/ChjXABtaUymFtKyrzduV8i+me8LfDYh7Jdh0thcWHz162omw==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-psql": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-psql/-/oci-psql-2.124.0.tgz", + "integrity": "sha512-bQJYFucaX0+uLXz0nbPEv6tCCLriaAUlIHdC2xpznCr+suGEit3xAAES7JQn3FbqllbgenhOaThMfpHKkiK7oA==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-queue": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-queue/-/oci-queue-2.124.0.tgz", + "integrity": "sha512-pF1NRHAFAhStf8yPRWTAB3taeT/3YAUdFB5bicwA7EqmJxVLs2pWH/dKlcRM/YtgWd0knqfJ/+HTu/rL6eBM6A==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-recovery": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-recovery/-/oci-recovery-2.124.0.tgz", + "integrity": "sha512-n3+5FPVHM3i4rbTOKNlbaxyQVl8h09memqffo+7nHQsqvF3NXMKY2vXmGA9tfWWZOwt1c5MLqZwZDznhZv03/g==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-redis": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-redis/-/oci-redis-2.124.0.tgz", + "integrity": "sha512-i1+LD3N8q8Rng/xIPxUADRCAuULShJq5nR2UNJ4rY3sRU+z2TAmxls1mTNHlm31su0OVMvr+RGmk7yr15Askig==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-resourceanalytics": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-resourceanalytics/-/oci-resourceanalytics-2.124.0.tgz", + "integrity": "sha512-+trp2xunjoxWhnEEp3GHypcLK87J8GqOJeZ2dB+fV1NW5FZX2Aqsslu/Gvim1iz2Z9AILjcbOyMWsHZBK60Ytw==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-resourcemanager": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-resourcemanager/-/oci-resourcemanager-2.124.0.tgz", + "integrity": "sha512-OfqBeFL50gnogpab3grp4QAA+OdjjwnGh5cV8+lPGWnmhZhctH0bMHyQ86FwdFj4xWlE9EwfRya8L+9z+5YOlg==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-resourcescheduler": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-resourcescheduler/-/oci-resourcescheduler-2.124.0.tgz", + "integrity": "sha512-NL2SeOJnl4OCR4lHscuaDAn+PR3p1ZRqL7IMdfD//sfIBxu2qvvpBW+zXOMz8RO7ReMoSvjt7LI0qpBWvajXCA==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-resourcesearch": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-resourcesearch/-/oci-resourcesearch-2.124.0.tgz", + "integrity": "sha512-1Gros2sKwlwdmyyR8TA7A8QsBFcCpWYCEb02XcqMxvGyy/HjA3XoMPqOgQjVpMxE4FDlEpxYXSimOLDPBJdxDA==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-rover": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-rover/-/oci-rover-2.124.0.tgz", + "integrity": "sha512-lWLMo7X5s109Z7J9bUk/T+ds7o//W+YpHlZjLxwSr7qVwAYcnCzcSmlBnIFpGsBK+BAt08DN5GOOPY93hfs0Fw==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-sch": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-sch/-/oci-sch-2.124.0.tgz", + "integrity": "sha512-YBSpQ8GegDgOIgIsYvucq/OWW0tpktGOsiJuW0Gj1y3VpSps7Ju8tWmAXJODi7TmJ8AgjKFbo1I2qPCW2scZpg==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-sdk": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-sdk/-/oci-sdk-2.124.0.tgz", + "integrity": "sha512-RP0L77+Ya9f3R+qgopsQy0XTzBsRqAsNMjw48gBFncIyCYnWSYdH2o4YKXCp6TlPL8LJa2E+kS0yW+Hfco2dOQ==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-accessgovernancecp": "2.124.0", + "oci-adm": "2.124.0", + "oci-aidataplatform": "2.124.0", + "oci-aidocument": "2.124.0", + "oci-ailanguage": "2.124.0", + "oci-aispeech": "2.124.0", + "oci-aivision": "2.124.0", + "oci-analytics": "2.124.0", + "oci-announcementsservice": "2.124.0", + "oci-apiaccesscontrol": "2.124.0", + "oci-apigateway": "2.124.0", + "oci-apiplatform": "2.124.0", + "oci-apmconfig": "2.124.0", + "oci-apmcontrolplane": "2.124.0", + "oci-apmsynthetics": "2.124.0", + "oci-apmtraces": "2.124.0", + "oci-appmgmtcontrol": "2.124.0", + "oci-artifacts": "2.124.0", + "oci-audit": "2.124.0", + "oci-autoscaling": "2.124.0", + "oci-bastion": "2.124.0", + "oci-batch": "2.124.0", + "oci-bds": "2.124.0", + "oci-blockchain": "2.124.0", + "oci-budget": "2.124.0", + "oci-capacitymanagement": "2.124.0", + "oci-certificates": "2.124.0", + "oci-certificatesmanagement": "2.124.0", + "oci-cims": "2.124.0", + "oci-cloudbridge": "2.124.0", + "oci-cloudguard": "2.124.0", + "oci-cloudmigrations": "2.124.0", + "oci-clusterplacementgroups": "2.124.0", + "oci-common": "2.124.0", + "oci-computecloudatcustomer": "2.124.0", + "oci-computeinstanceagent": "2.124.0", + "oci-containerengine": "2.124.0", + "oci-containerinstances": "2.124.0", + "oci-core": "2.124.0", + "oci-dashboardservice": "2.124.0", + "oci-database": "2.124.0", + "oci-databasemanagement": "2.124.0", + "oci-databasemigration": "2.124.0", + "oci-databasetools": "2.124.0", + "oci-datacatalog": "2.124.0", + "oci-dataflow": "2.124.0", + "oci-dataintegration": "2.124.0", + "oci-datalabelingservice": "2.124.0", + "oci-datalabelingservicedataplane": "2.124.0", + "oci-datasafe": "2.124.0", + "oci-datascience": "2.124.0", + "oci-dblm": "2.124.0", + "oci-dbmulticloud": "2.124.0", + "oci-delegateaccesscontrol": "2.124.0", + "oci-demandsignal": "2.124.0", + "oci-desktops": "2.124.0", + "oci-devops": "2.124.0", + "oci-dif": "2.124.0", + "oci-disasterrecovery": "2.124.0", + "oci-distributeddatabase": "2.124.0", + "oci-dns": "2.124.0", + "oci-email": "2.124.0", + "oci-emaildataplane": "2.124.0", + "oci-emwarehouse": "2.124.0", + "oci-events": "2.124.0", + "oci-filestorage": "2.124.0", + "oci-fleetappsmanagement": "2.124.0", + "oci-fleetsoftwareupdate": "2.124.0", + "oci-functions": "2.124.0", + "oci-fusionapps": "2.124.0", + "oci-generativeai": "2.124.0", + "oci-generativeaiagent": "2.124.0", + "oci-generativeaiagentruntime": "2.124.0", + "oci-generativeaiinference": "2.124.0", + "oci-genericartifactscontent": "2.124.0", + "oci-globallydistributeddatabase": "2.124.0", + "oci-goldengate": "2.124.0", + "oci-governancerulescontrolplane": "2.124.0", + "oci-healthchecks": "2.124.0", + "oci-identity": "2.124.0", + "oci-identitydataplane": "2.124.0", + "oci-identitydomains": "2.124.0", + "oci-integration": "2.124.0", + "oci-iot": "2.124.0", + "oci-jms": "2.124.0", + "oci-jmsjavadownloads": "2.124.0", + "oci-jmsutils": "2.124.0", + "oci-keymanagement": "2.124.0", + "oci-licensemanager": "2.124.0", + "oci-limits": "2.124.0", + "oci-loadbalancer": "2.124.0", + "oci-lockbox": "2.124.0", + "oci-loganalytics": "2.124.0", + "oci-logging": "2.124.0", + "oci-loggingingestion": "2.124.0", + "oci-loggingsearch": "2.124.0", + "oci-lustrefilestorage": "2.124.0", + "oci-managedkafka": "2.124.0", + "oci-managementagent": "2.124.0", + "oci-managementdashboard": "2.124.0", + "oci-marketplace": "2.124.0", + "oci-marketplaceprivateoffer": "2.124.0", + "oci-marketplacepublisher": "2.124.0", + "oci-mediaservices": "2.124.0", + "oci-mngdmac": "2.124.0", + "oci-modeldeployment": "2.124.0", + "oci-monitoring": "2.124.0", + "oci-multicloud": "2.124.0", + "oci-mysql": "2.124.0", + "oci-networkfirewall": "2.124.0", + "oci-networkloadbalancer": "2.124.0", + "oci-nosql": "2.124.0", + "oci-objectstorage": "2.124.0", + "oci-oce": "2.124.0", + "oci-ocicontrolcenter": "2.124.0", + "oci-ocvp": "2.124.0", + "oci-oda": "2.124.0", + "oci-onesubscription": "2.124.0", + "oci-ons": "2.124.0", + "oci-opa": "2.124.0", + "oci-opensearch": "2.124.0", + "oci-operatoraccesscontrol": "2.124.0", + "oci-opsi": "2.124.0", + "oci-optimizer": "2.124.0", + "oci-osmanagementhub": "2.124.0", + "oci-ospgateway": "2.124.0", + "oci-osubbillingschedule": "2.124.0", + "oci-osuborganizationsubscription": "2.124.0", + "oci-osubsubscription": "2.124.0", + "oci-osubusage": "2.124.0", + "oci-psa": "2.124.0", + "oci-psql": "2.124.0", + "oci-queue": "2.124.0", + "oci-recovery": "2.124.0", + "oci-redis": "2.124.0", + "oci-resourceanalytics": "2.124.0", + "oci-resourcemanager": "2.124.0", + "oci-resourcescheduler": "2.124.0", + "oci-resourcesearch": "2.124.0", + "oci-rover": "2.124.0", + "oci-sch": "2.124.0", + "oci-secrets": "2.124.0", + "oci-securityattribute": "2.124.0", + "oci-servicecatalog": "2.124.0", + "oci-servicemanagerproxy": "2.124.0", + "oci-stackmonitoring": "2.124.0", + "oci-streaming": "2.124.0", + "oci-tenantmanagercontrolplane": "2.124.0", + "oci-threatintelligence": "2.124.0", + "oci-usage": "2.124.0", + "oci-usageapi": "2.124.0", + "oci-vault": "2.124.0", + "oci-vbsinst": "2.124.0", + "oci-visualbuilder": "2.124.0", + "oci-vnmonitoring": "2.124.0", + "oci-vulnerabilityscanning": "2.124.0", + "oci-waa": "2.124.0", + "oci-waas": "2.124.0", + "oci-waf": "2.124.0", + "oci-wlms": "2.124.0", + "oci-workrequests": "2.124.0", + "oci-zpr": "2.124.0" + } + }, + "node_modules/oci-secrets": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-secrets/-/oci-secrets-2.124.0.tgz", + "integrity": "sha512-Q14VvdsPeh1TFzd29Fj0F5W87MdA1izv8f3ces3SR52AiKcnwewn7jJkMVVWHMjOgqsTsI1O2Lttx11p5LcueQ==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-securityattribute": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-securityattribute/-/oci-securityattribute-2.124.0.tgz", + "integrity": "sha512-GoK0VacPzTMR8BwVut3Jaah9ZnLqdGFL9cEY2SpUdZV9+DUlseDRF2lnoAzJvnPNRoYr9teOUwXJIoS3/5FuFw==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-servicecatalog": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-servicecatalog/-/oci-servicecatalog-2.124.0.tgz", + "integrity": "sha512-OmhDGnJvEBRE4Xyk41TBMM0am4OjLboq/t4EBwgyy+7jEmBaszYRSzto07CKH8OWYpdFeeC6mgy35sZryK+5ng==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-servicemanagerproxy": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-servicemanagerproxy/-/oci-servicemanagerproxy-2.124.0.tgz", + "integrity": "sha512-V54Ef9jMlnQ5NZpn3ki6yKSNkweb+Jrb6wg9IX7mtKYVzB968hSE+cqZAo3oEOYnLHKn4r5HL+NF4hUXg/yk+w==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-stackmonitoring": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-stackmonitoring/-/oci-stackmonitoring-2.124.0.tgz", + "integrity": "sha512-w5vvoMpqx8bTaVRVMMib3kyfnktRRolLBe8vyjGqd8U6L2AIoR/L3b8h7gGbRrPcgc1NfddP21r/g70MXmH33A==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-streaming": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-streaming/-/oci-streaming-2.124.0.tgz", + "integrity": "sha512-+SvQ1QDeWDPi16SdlVbFBtiUGZd27nYzPRhwrjiBphuQLaNJdZynR+QodSr1yATTAARecw7PXtCtDRV4ucO9Sg==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-tenantmanagercontrolplane": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-tenantmanagercontrolplane/-/oci-tenantmanagercontrolplane-2.124.0.tgz", + "integrity": "sha512-V2z7q4xGtiYt/7N+/IIaYTnNDmDNO/XkogC+SzeVFemDF+80c+ecse7R+xwpOS7s0lvuNlnNP3ZuBIMlHOhoKg==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-threatintelligence": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-threatintelligence/-/oci-threatintelligence-2.124.0.tgz", + "integrity": "sha512-97TZcj/DmmUQFOLUrgCsQE0zV9kRkGeenULksgUo0VpvU56OJF5INw2cDxzVM8hj6sXWozPjsSlnVBMZpf09jQ==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-usage": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-usage/-/oci-usage-2.124.0.tgz", + "integrity": "sha512-2yf1xlb4PlK9SEihcVbIO3Xr/K6fwbmX/H4301Q4/jPXHLJjty0/M11/UOvd+Ok/SkIvXz+7rrAhqCWN1is3sg==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-usageapi": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-usageapi/-/oci-usageapi-2.124.0.tgz", + "integrity": "sha512-932FJXDhBCopjj0+OZ1y12DgwfrYP/1IctFiiHpuOKMYyxGFlEBcfjs6Y6YVvcFZ57uSDry//v3XyMaa7WJ51A==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-vault": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-vault/-/oci-vault-2.124.0.tgz", + "integrity": "sha512-yulbC1VsuNbwmfRJDLRuT0LaXT0EUWSewDn8nQopGAmLvxgh7Hij6RSlUoa+EddyB9zp8x4OixP2A25AYChhVA==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-vbsinst": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-vbsinst/-/oci-vbsinst-2.124.0.tgz", + "integrity": "sha512-kKtXaCZkIHwF+QiQff5Q94L+a2b+/kcTKPkmPhVEbKdXpFI/xGGHyH0fjlQVX0NBAUdRYovxux/ytDQoHHeRsw==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-visualbuilder": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-visualbuilder/-/oci-visualbuilder-2.124.0.tgz", + "integrity": "sha512-o+EUWZq8iPe7QRlYNDI2NXrO2pyinjarjlQr5Aqr4upUEtbVUJ3+GCxEoVLBXLviKfh2QxinFn7xfGft/hm2LA==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-vnmonitoring": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-vnmonitoring/-/oci-vnmonitoring-2.124.0.tgz", + "integrity": "sha512-eVlRzjwJ4yfoM7wJpSFtKiyxQ2tYFWDBa4Uj4gZVn/mLf+f86lZpU02sOH9/dvWEUciCMAt5RNRU+BjidJUB9Q==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-vulnerabilityscanning": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-vulnerabilityscanning/-/oci-vulnerabilityscanning-2.124.0.tgz", + "integrity": "sha512-Fp150TT24ypwBlrwl4I+meEGjacvB502OstehJDj6iaUr9c44VLYT8b8ASyInK0EjNhD3D/IYwxwrgX+f9aW8w==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-waa": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-waa/-/oci-waa-2.124.0.tgz", + "integrity": "sha512-aB0roOUAViKxsvN1UqSRjSjUqv/FpaTQ641CXbo0xuH3TOmJlwhFwqgGSOXD9EVHXa7ckO/PIilNYpp4dyUlCw==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-waas": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-waas/-/oci-waas-2.124.0.tgz", + "integrity": "sha512-U/2VWIg+bFB9Jj8EnhK6BN4nM/h6UVJVPLE9CVCOy2LpJ3/UdQQQJ8kCDxya9Q5+EIOq2HuyFd3wMPJOFeFecw==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-waf": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-waf/-/oci-waf-2.124.0.tgz", + "integrity": "sha512-Q2ILofeTP22RSS2Df+IoitL1TAW34ZuS8jO6VCgkkNkH0kGI9ii+C9sdDvp4IQRgkfqPWOl+gFdmqbo0NeghdQ==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-wlms": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-wlms/-/oci-wlms-2.124.0.tgz", + "integrity": "sha512-m4amIvJ66M1B8mb/4gkG0SEKez8TBszlE+0/bt5Pukw1PxK2hWeAhAg06agkdbIeY5nD6TYZiTVOJdHfdbeysA==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-workrequests": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-workrequests/-/oci-workrequests-2.124.0.tgz", + "integrity": "sha512-gcQ8gbmF9zATiCFJ3c0H58tJDuruDEm5ibUMkKGfa646T/BMxdmRRS4sI7GkRFrNUicJYWzX6tCD11ePbuDJrA==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/oci-zpr": { + "version": "2.124.0", + "resolved": "https://registry.npmjs.org/oci-zpr/-/oci-zpr-2.124.0.tgz", + "integrity": "sha512-R/TRBIHTUfmNYVHZBKvwrwqyQ8s1l/Av/kzVI3DB7064AKSqPqwFOSddKUC54F/SBGcnKnfaSG8casWnW2OifQ==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.124.0", + "oci-workrequests": "2.124.0" + } + }, + "node_modules/opossum": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/opossum/-/opossum-5.0.1.tgz", + "integrity": "sha512-iUDUQmFl3RanaBVLMDTZ6WtXj/Hk84pwJ5JWoJaQd1lXGifdApHhszI3biZvdBDdpTERCmB6x+7+uNvzhzVZIg==", + "license": "Apache-2.0", + "engines": { + "node": ">= 10" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pako": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==", + "license": "(MIT AND Zlib)" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pdfjs-dist": { + "version": "5.4.624", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-5.4.624.tgz", + "integrity": "sha512-sm6TxKTtWv1Oh6n3C6J6a8odejb5uO4A4zo/2dgkHuC0iu8ZMAXOezEODkVaoVp8nX1Xzr+0WxFJJmUr45hQzg==", + "license": "Apache-2.0", + "engines": { + "node": ">=20.16.0 || >=22.3.0" + }, + "optionalDependencies": { + "@napi-rs/canvas": "^0.1.88", + "node-readable-to-web-readable-stream": "^0.4.2" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "license": "MIT", + "optional": true + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/playwright": { + "version": "1.57.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.57.0.tgz", + "integrity": "sha512-ilYQj1s8sr2ppEJ2YVadYBN0Mb3mdo9J0wQ+UuDhzYqURwSoW4n1Xs5vs7ORwgDGmyEh33tRMeS8KhdkMoLXQw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.57.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.57.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.57.0.tgz", + "integrity": "sha512-agTcKlMw/mjBWOnD6kFZttAAGHgi/Nw0CZ2o6JqWSbMlI219lAFLZZCyqByTsvVAJq5XA5H8cA6PrvBRpBWEuQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/property-information": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.0.0.tgz", + "integrity": "sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "license": "MIT", + "optional": true, + "dependencies": { + "performance-now": "^2.1.0" + } + }, + "node_modules/react": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", + "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.3" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/react-markdown": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-10.1.0.tgz", + "integrity": "sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "hast-util-to-jsx-runtime": "^2.0.0", + "html-url-attributes": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "unified": "^11.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@types/react": ">=18", + "react": ">=18" + } + }, + "node_modules/react-redux": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz", + "integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==", + "license": "MIT", + "dependencies": { + "@types/use-sync-external-store": "^0.0.6", + "use-sync-external-store": "^1.4.0" + }, + "peerDependencies": { + "@types/react": "^18.2.25 || ^19", + "react": "^18.0 || ^19", + "redux": "^5.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "redux": { + "optional": true + } + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/recharts": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-3.6.0.tgz", + "integrity": "sha512-L5bjxvQRAe26RlToBAziKUB7whaGKEwD3znoM6fz3DrTowCIC/FnJYnuq1GEzB8Zv2kdTfaxQfi5GoH0tBinyg==", + "license": "MIT", + "workspaces": [ + "www" + ], + "dependencies": { + "@reduxjs/toolkit": "1.x.x || 2.x.x", + "clsx": "^2.1.1", + "decimal.js-light": "^2.5.1", + "es-toolkit": "^1.39.3", + "eventemitter3": "^5.0.1", + "immer": "^10.1.1", + "react-redux": "8.x.x || 9.x.x", + "reselect": "5.1.1", + "tiny-invariant": "^1.3.3", + "use-sync-external-store": "^1.2.2", + "victory-vendor": "^37.0.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-is": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/redux": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", + "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", + "license": "MIT" + }, + "node_modules/redux-thunk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-3.1.0.tgz", + "integrity": "sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==", + "license": "MIT", + "peerDependencies": { + "redux": "^5.0.0" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "license": "MIT", + "optional": true + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/remark-gfm": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", + "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/reselect": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz", + "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==", + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rgbcolor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz", + "integrity": "sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==", + "license": "MIT OR SEE LICENSE IN FEEL-FREE.md", + "optional": true, + "engines": { + "node": ">= 0.8.15" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/sharp": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", + "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.2", + "semver": "^7.7.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.5", + "@img/sharp-darwin-x64": "0.34.5", + "@img/sharp-libvips-darwin-arm64": "1.2.4", + "@img/sharp-libvips-darwin-x64": "1.2.4", + "@img/sharp-libvips-linux-arm": "1.2.4", + "@img/sharp-libvips-linux-arm64": "1.2.4", + "@img/sharp-libvips-linux-ppc64": "1.2.4", + "@img/sharp-libvips-linux-riscv64": "1.2.4", + "@img/sharp-libvips-linux-s390x": "1.2.4", + "@img/sharp-libvips-linux-x64": "1.2.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", + "@img/sharp-libvips-linuxmusl-x64": "1.2.4", + "@img/sharp-linux-arm": "0.34.5", + "@img/sharp-linux-arm64": "0.34.5", + "@img/sharp-linux-ppc64": "0.34.5", + "@img/sharp-linux-riscv64": "0.34.5", + "@img/sharp-linux-s390x": "0.34.5", + "@img/sharp-linux-x64": "0.34.5", + "@img/sharp-linuxmusl-arm64": "0.34.5", + "@img/sharp-linuxmusl-x64": "0.34.5", + "@img/sharp-wasm32": "0.34.5", + "@img/sharp-win32-arm64": "0.34.5", + "@img/sharp-win32-ia32": "0.34.5", + "@img/sharp-win32-x64": "0.34.5" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/ssf": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz", + "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==", + "license": "Apache-2.0", + "dependencies": { + "frac": "~1.1.2" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "license": "MIT", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stable-hash": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz", + "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==", + "dev": true, + "license": "MIT" + }, + "node_modules/stackblur-canvas": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.7.0.tgz", + "integrity": "sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.14" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.includes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", + "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-to-js": { + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.16.tgz", + "integrity": "sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw==", + "license": "MIT", + "dependencies": { + "style-to-object": "1.0.8" + } + }, + "node_modules/style-to-object": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.8.tgz", + "integrity": "sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==", + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.2.4" + } + }, + "node_modules/styled-jsx": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", + "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==", + "license": "MIT", + "dependencies": { + "client-only": "0.0.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==", + "license": "MIT" + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-pathdata": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/svg-pathdata/-/svg-pathdata-6.0.3.tgz", + "integrity": "sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/text-segmentation": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz", + "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==", + "license": "MIT", + "dependencies": { + "utrie": "^1.0.2" + } + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/ts-api-utils": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz", + "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "license": "Unlicense" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.53.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.53.0.tgz", + "integrity": "sha512-xHURCQNxZ1dsWn0sdOaOfCSQG0HKeqSj9OexIxrz6ypU6wHYOdX2I3D2b8s8wFSsSOYJb+6q283cLiLlkEsBYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.53.0", + "@typescript-eslint/parser": "8.53.0", + "@typescript-eslint/typescript-estree": "8.53.0", + "@typescript-eslint/utils": "8.53.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "license": "MIT" + }, + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unrs-resolver": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.6.3.tgz", + "integrity": "sha512-mYNIMmxlDcaepmUTNrBu2tEB/bRkLBUeAhke8XOnXYqSu/9dUk4cdFiJG1N4d5Q7Fii+9MpgavkxJpnXPqNhHw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "napi-postinstall": "^0.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/JounQin" + }, + "optionalDependencies": { + "@unrs/resolver-binding-darwin-arm64": "1.6.3", + "@unrs/resolver-binding-darwin-x64": "1.6.3", + "@unrs/resolver-binding-freebsd-x64": "1.6.3", + "@unrs/resolver-binding-linux-arm-gnueabihf": "1.6.3", + "@unrs/resolver-binding-linux-arm-musleabihf": "1.6.3", + "@unrs/resolver-binding-linux-arm64-gnu": "1.6.3", + "@unrs/resolver-binding-linux-arm64-musl": "1.6.3", + "@unrs/resolver-binding-linux-ppc64-gnu": "1.6.3", + "@unrs/resolver-binding-linux-riscv64-gnu": "1.6.3", + "@unrs/resolver-binding-linux-s390x-gnu": "1.6.3", + "@unrs/resolver-binding-linux-x64-gnu": "1.6.3", + "@unrs/resolver-binding-linux-x64-musl": "1.6.3", + "@unrs/resolver-binding-wasm32-wasi": "1.6.3", + "@unrs/resolver-binding-win32-arm64-msvc": "1.6.3", + "@unrs/resolver-binding-win32-ia32-msvc": "1.6.3", + "@unrs/resolver-binding-win32-x64-msvc": "1.6.3" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-sync-external-store": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/utrie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz", + "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==", + "license": "MIT", + "dependencies": { + "base64-arraybuffer": "^1.0.2" + } + }, + "node_modules/uuid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", + "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "license": "MIT", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/victory-vendor": { + "version": "37.3.6", + "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-37.3.6.tgz", + "integrity": "sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ==", + "license": "MIT AND ISC", + "dependencies": { + "@types/d3-array": "^3.0.3", + "@types/d3-ease": "^3.0.0", + "@types/d3-interpolate": "^3.0.1", + "@types/d3-scale": "^4.0.2", + "@types/d3-shape": "^3.1.0", + "@types/d3-time": "^3.0.0", + "@types/d3-timer": "^3.0.0", + "d3-array": "^3.1.6", + "d3-ease": "^3.0.1", + "d3-interpolate": "^3.0.1", + "d3-scale": "^4.0.2", + "d3-shape": "^3.1.0", + "d3-time": "^3.0.0", + "d3-timer": "^3.0.1" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-fetch": { + "version": "3.6.20", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", + "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==", + "license": "MIT" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wmf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz", + "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/word": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz", + "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/xlsx": { + "version": "0.18.5", + "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.18.5.tgz", + "integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==", + "license": "Apache-2.0", + "dependencies": { + "adler-32": "~1.3.0", + "cfb": "~1.2.1", + "codepage": "~1.15.0", + "crc-32": "~1.2.1", + "ssf": "~0.11.2", + "wmf": "~1.0.1", + "word": "~0.3.0" + }, + "bin": { + "xlsx": "bin/xlsx.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.5.tgz", + "integrity": "sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-validation-error": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz", + "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" + } + }, + "node_modules/zustand": { + "version": "4.5.7", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.5.7.tgz", + "integrity": "sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw==", + "license": "MIT", + "dependencies": { + "use-sync-external-store": "^1.2.2" + }, + "engines": { + "node": ">=12.7.0" + }, + "peerDependencies": { + "@types/react": ">=16.8", + "immer": ">=9.0.6", + "react": ">=16.8" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + } + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/package.json b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/package.json new file mode 100644 index 000000000..a1df2a9e6 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/package.json @@ -0,0 +1,46 @@ +{ + "name": "oci-agent-light-demo-creator", + "version": "0.3.2", + "private": true, + "scripts": { + "dev": "next dev --turbopack", + "build": "next build", + "start": "next start", + "lint": "next lint", + "test": "playwright test" + }, + "dependencies": { + "@emotion/cache": "^11.14.0", + "@emotion/react": "^11.14.0", + "@emotion/styled": "^11.14.1", + "@mui/icons-material": "^7.3.7", + "@mui/material": "^7.3.7", + "@mui/material-nextjs": "^7.3.7", + "@mui/x-data-grid": "^8.27.0", + "@uiw/react-json-view": "^2.0.0-alpha.40", + "@xyflow/react": "^12.10.0", + "framer-motion": "^12.27.0", + "html-to-image": "^1.11.13", + "html2canvas": "^1.4.1", + "jspdf": "^4.1.0", + "jspdf-autotable": "^5.0.7", + "langfuse": "^3.38.20", + "lucide-react": "^0.562.0", + "next": "^16.1.3", + "oci-sdk": "^2.124.0", + "pdfjs-dist": "^5.4.624", + "react": "^19.2.3", + "react-dom": "^19.2.3", + "react-markdown": "^10.1.0", + "recharts": "^3.6.0", + "remark-gfm": "^4.0.1", + "xlsx": "^0.18.5" + }, + "devDependencies": { + "@eslint/eslintrc": "^3", + "@iconify/react": "^6.0.2", + "eslint": "^9", + "eslint-config-next": "16.1.3", + "playwright": "^1.57.0" + } +} diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/playwright.config.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/playwright.config.js new file mode 100644 index 000000000..8129595f1 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/playwright.config.js @@ -0,0 +1,71 @@ +import { defineConfig, devices } from '@playwright/test'; + +/** + * @see https://playwright.dev/docs/test-configuration + */ +export default defineConfig({ + testDir: './tests', + /* Run tests in files in parallel */ + fullyParallel: true, + /* Fail the build on CI if you accidentally left test.only in the source code. */ + forbidOnly: !!process.env.CI, + /* Retry on CI only */ + retries: process.env.CI ? 2 : 0, + /* Opt out of parallel tests on CI. */ + workers: process.env.CI ? 1 : undefined, + /* Reporter to use. See https://playwright.dev/docs/test-reporters */ + reporter: 'html', + /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ + use: { + /* Base URL to use in actions like `await page.goto('/')`. */ + baseURL: 'http://localhost:3000', + + /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ + trace: 'on-first-retry', + }, + + /* Configure projects for major browsers */ + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + + { + name: 'firefox', + use: { ...devices['Desktop Firefox'] }, + }, + + { + name: 'webkit', + use: { ...devices['Desktop Safari'] }, + }, + + /* Test against mobile viewports. */ + // { + // name: 'Mobile Chrome', + // use: { ...devices['Pixel 5'] }, + // }, + // { + // name: 'Mobile Safari', + // use: { ...devices['iPhone 12'] }, + // }, + + /* Test against branded browsers. */ + // { + // name: 'Microsoft Edge', + // use: { ...devices['Desktop Edge'], channel: 'msedge' }, + // }, + // { + // name: 'Google Chrome', + // use: { ...devices['Desktop Chrome'], channel: 'chrome' }, + // }, + ], + + /* Run your local dev server before starting the tests */ + webServer: { + command: 'npm run dev', + url: 'http://localhost:3000', + reuseExistingServer: !process.env.CI, + }, +}); \ No newline at end of file diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/entypo--lab-flask.svg b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/entypo--lab-flask.svg new file mode 100644 index 000000000..6fc8e489e --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/entypo--lab-flask.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSansCd_Bd.ttf b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSansCd_Bd.ttf new file mode 100755 index 000000000..7630ab7bf Binary files /dev/null and b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSansCd_Bd.ttf differ diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSansCd_BdIt.ttf b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSansCd_BdIt.ttf new file mode 100755 index 000000000..239407f38 Binary files /dev/null and b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSansCd_BdIt.ttf differ diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSansCd_It.ttf b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSansCd_It.ttf new file mode 100755 index 000000000..96b7af8ef Binary files /dev/null and b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSansCd_It.ttf differ diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSansCd_Lt.ttf b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSansCd_Lt.ttf new file mode 100755 index 000000000..9170c20e0 Binary files /dev/null and b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSansCd_Lt.ttf differ diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSansCd_LtIt.ttf b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSansCd_LtIt.ttf new file mode 100755 index 000000000..0bef30438 Binary files /dev/null and b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSansCd_LtIt.ttf differ diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSansCd_Rg.ttf b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSansCd_Rg.ttf new file mode 100755 index 000000000..e2cdb44ae Binary files /dev/null and b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSansCd_Rg.ttf differ diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSans_Bd.ttf b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSans_Bd.ttf new file mode 100755 index 000000000..74899b06b Binary files /dev/null and b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSans_Bd.ttf differ diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSans_BdIt.ttf b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSans_BdIt.ttf new file mode 100755 index 000000000..55fd62781 Binary files /dev/null and b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSans_BdIt.ttf differ diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSans_It.ttf b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSans_It.ttf new file mode 100755 index 000000000..262150ab2 Binary files /dev/null and b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSans_It.ttf differ diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSans_Lt.ttf b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSans_Lt.ttf new file mode 100755 index 000000000..0eaf6d470 Binary files /dev/null and b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSans_Lt.ttf differ diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSans_LtIt.ttf b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSans_LtIt.ttf new file mode 100755 index 000000000..9992cd2ed Binary files /dev/null and b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSans_LtIt.ttf differ diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSans_Rg.ttf b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSans_Rg.ttf new file mode 100755 index 000000000..7a46734f5 Binary files /dev/null and b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSans_Rg.ttf differ diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSans_SBd.ttf b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSans_SBd.ttf new file mode 100755 index 000000000..7148e05e6 Binary files /dev/null and b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSans_SBd.ttf differ diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSans_SBdIt.ttf b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSans_SBdIt.ttf new file mode 100755 index 000000000..fc6bea579 Binary files /dev/null and b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSans_SBdIt.ttf differ diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSans_ULt.ttf b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSans_ULt.ttf new file mode 100755 index 000000000..16dabcec5 Binary files /dev/null and b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSans_ULt.ttf differ diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSans_ULtIt.ttf b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSans_ULtIt.ttf new file mode 100755 index 000000000..4871aee77 Binary files /dev/null and b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSans_ULtIt.ttf differ diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSans_XBd.ttf b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSans_XBd.ttf new file mode 100755 index 000000000..f1adf9266 Binary files /dev/null and b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSans_XBd.ttf differ diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSans_XBdIt.ttf b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSans_XBdIt.ttf new file mode 100755 index 000000000..0c6ec3f71 Binary files /dev/null and b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/fonts/OracleSans/OracleSans_XBdIt.ttf differ diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/oracle-logo-building.png b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/oracle-logo-building.png new file mode 100644 index 000000000..dd2b6a5b4 Binary files /dev/null and b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/oracle-logo-building.png differ diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/oracle-logo-building.svg b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/oracle-logo-building.svg new file mode 100644 index 000000000..627916774 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/oracle-logo-building.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/oracle-logo.png b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/oracle-logo.png new file mode 100644 index 000000000..38fc17b79 Binary files /dev/null and b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/oracle-logo.png differ diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/pdf.worker.min.mjs b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/pdf.worker.min.mjs new file mode 100644 index 000000000..b2645af08 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/pdf.worker.min.mjs @@ -0,0 +1,28 @@ +/** + * @licstart The following is the entire license notice for the + * JavaScript code in this page + * + * Copyright 2024 Mozilla Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @licend The above is the entire license notice for the + * JavaScript code in this page + */ +/** + * pdfjsVersion = 5.4.624 + * pdfjsBuild = 384c6208b + */const e=!("object"!=typeof process||process+""!="[object process]"||process.versions.nw||process.versions.electron&&process.type&&"browser"!==process.type),t=[.001,0,0,.001,0,0],a=1.35,r=.35,i=.25925925925925924,n=1,s=2,o=4,c=8,l=16,h=64,u=128,d=256,f="pdfjs_internal_editor_",g=3,p=9,m=13,b=15,y=101,w={PRINT:4,MODIFY_CONTENTS:8,COPY:16,MODIFY_ANNOTATIONS:32,FILL_INTERACTIVE_FORMS:256,COPY_FOR_ACCESSIBILITY:512,ASSEMBLE:1024,PRINT_HIGH_QUALITY:2048},S=1,x=2,k=3,C=0,v=4,F=1,T=2,O=3,D={TEXT:1,LINK:2,FREETEXT:3,LINE:4,SQUARE:5,CIRCLE:6,POLYGON:7,POLYLINE:8,HIGHLIGHT:9,UNDERLINE:10,SQUIGGLY:11,STRIKEOUT:12,STAMP:13,CARET:14,INK:15,POPUP:16,FILEATTACHMENT:17,SOUND:18,MOVIE:19,WIDGET:20,SCREEN:21,PRINTERMARK:22,TRAPNET:23,WATERMARK:24,THREED:25,REDACT:26},M="Group",R="R",N=1,E=2,L=4,_=16,U=32,j=128,X=512,q=1,H=2,W=4096,G=8192,$=32768,z=65536,V=131072,K=1048576,J=2097152,Y=8388608,Z=16777216,Q=1,ee=2,te=3,ae=4,re=5,ie={E:"Mouse Enter",X:"Mouse Exit",D:"Mouse Down",U:"Mouse Up",Fo:"Focus",Bl:"Blur",PO:"PageOpen",PC:"PageClose",PV:"PageVisible",PI:"PageInvisible",K:"Keystroke",F:"Format",V:"Validate",C:"Calculate"},ne={WC:"WillClose",WS:"WillSave",DS:"DidSave",WP:"WillPrint",DP:"DidPrint"},se={O:"PageOpen",C:"PageClose"},oe=1,ce=5,le=1,he=2,ue=3,de=4,fe=5,ge=6,pe=7,me=8,be=9,ye=10,we=11,Se=12,xe=13,Ae=14,ke=15,Ce=16,ve=17,Fe=18,Ie=19,Te=20,Oe=21,De=22,Me=23,Re=24,Be=25,Ne=26,Pe=27,Ee=28,Le=29,_e=30,Ue=31,je=32,Xe=33,qe=34,He=35,We=36,Ge=37,$e=38,ze=39,Ve=40,Ke=41,Je=42,Ye=43,Ze=44,Qe=45,et=46,tt=47,at=48,rt=49,it=50,nt=51,st=52,ot=53,ct=54,lt=55,ht=56,ut=57,dt=58,ft=59,gt=60,pt=61,mt=62,bt=63,yt=64,wt=65,St=66,xt=67,At=68,kt=69,Ct=70,vt=71,Ft=72,It=73,Tt=74,Ot=75,Dt=76,Mt=77,Rt=80,Bt=81,Nt=83,Pt=84,Et=85,Lt=86,_t=87,Ut=88,jt=89,Xt=90,qt=91,Ht=92,Wt=93,Gt=94,$t=0,zt=1,Vt=2,Kt=3,Jt=4,Yt=1,Zt=2;let Qt=oe;function getVerbosityLevel(){return Qt}function info(e){Qt>=ce&&console.info(`Info: ${e}`)}function warn(e){Qt>=oe&&console.warn(`Warning: ${e}`)}function unreachable(e){throw new Error(e)}function assert(e,t){e||unreachable(t)}function createValidAbsoluteUrl(e,t=null,a=null){if(!e)return null;if(a&&"string"==typeof e){if(a.addDefaultProtocol&&e.startsWith("www.")){const t=e.match(/\./g);t?.length>=2&&(e=`http://${e}`)}if(a.tryConvertEncoding)try{e=stringToUTF8String(e)}catch{}}const r=t?URL.parse(e,t):URL.parse(e);return function _isValidProtocol(e){switch(e?.protocol){case"http:":case"https:":case"ftp:":case"mailto:":case"tel:":return!0;default:return!1}}(r)?r:null}function shadow(e,t,a,r=!1){Object.defineProperty(e,t,{value:a,enumerable:!r,configurable:!0,writable:!1});return a}const ea=function BaseExceptionClosure(){function BaseException(e,t){this.message=e;this.name=t}BaseException.prototype=new Error;BaseException.constructor=BaseException;return BaseException}();class PasswordException extends ea{constructor(e,t){super(e,"PasswordException");this.code=t}}class UnknownErrorException extends ea{constructor(e,t){super(e,"UnknownErrorException");this.details=t}}class InvalidPDFException extends ea{constructor(e){super(e,"InvalidPDFException")}}class ResponseException extends ea{constructor(e,t,a){super(e,"ResponseException");this.status=t;this.missing=a}}class FormatError extends ea{constructor(e){super(e,"FormatError")}}class AbortException extends ea{constructor(e){super(e,"AbortException")}}function bytesToString(e){"object"==typeof e&&void 0!==e?.length||unreachable("Invalid argument for bytesToString");const t=e.length,a=8192;if(t>24&255,e>>16&255,e>>8&255,255&e)}function objectSize(e){return Object.keys(e).length}class FeatureTest{static get isLittleEndian(){return shadow(this,"isLittleEndian",function isLittleEndian(){const e=new Uint8Array(4);e[0]=1;return 1===new Uint32Array(e.buffer,0,1)[0]}())}static get isEvalSupported(){return shadow(this,"isEvalSupported",function isEvalSupported(){try{new Function("");return!0}catch{return!1}}())}static get isOffscreenCanvasSupported(){return shadow(this,"isOffscreenCanvasSupported","undefined"!=typeof OffscreenCanvas)}static get isImageDecoderSupported(){return shadow(this,"isImageDecoderSupported","undefined"!=typeof ImageDecoder)}static get isFloat16ArraySupported(){return shadow(this,"isFloat16ArraySupported","undefined"!=typeof Float16Array)}static get isSanitizerSupported(){return shadow(this,"isSanitizerSupported","undefined"!=typeof Sanitizer)}static get platform(){const{platform:e,userAgent:t}=navigator;return shadow(this,"platform",{isAndroid:t.includes("Android"),isLinux:e.includes("Linux"),isMac:e.includes("Mac"),isWindows:e.includes("Win"),isFirefox:t.includes("Firefox")})}static get isCSSRoundSupported(){return shadow(this,"isCSSRoundSupported",globalThis.CSS?.supports?.("width: round(1.5px, 1px)"))}}const ta=Array.from(Array(256).keys(),e=>e.toString(16).padStart(2,"0"));class Util{static makeHexColor(e,t,a){return`#${ta[e]}${ta[t]}${ta[a]}`}static domMatrixToTransform(e){return[e.a,e.b,e.c,e.d,e.e,e.f]}static scaleMinMax(e,t){let a;if(e[0]){if(e[0]<0){a=t[0];t[0]=t[2];t[2]=a}t[0]*=e[0];t[2]*=e[0];if(e[3]<0){a=t[1];t[1]=t[3];t[3]=a}t[1]*=e[3];t[3]*=e[3]}else{a=t[0];t[0]=t[1];t[1]=a;a=t[2];t[2]=t[3];t[3]=a;if(e[1]<0){a=t[1];t[1]=t[3];t[3]=a}t[1]*=e[1];t[3]*=e[1];if(e[2]<0){a=t[0];t[0]=t[2];t[2]=a}t[0]*=e[2];t[2]*=e[2]}t[0]+=e[4];t[1]+=e[5];t[2]+=e[4];t[3]+=e[5]}static transform(e,t){return[e[0]*t[0]+e[2]*t[1],e[1]*t[0]+e[3]*t[1],e[0]*t[2]+e[2]*t[3],e[1]*t[2]+e[3]*t[3],e[0]*t[4]+e[2]*t[5]+e[4],e[1]*t[4]+e[3]*t[5]+e[5]]}static multiplyByDOMMatrix(e,t){return[e[0]*t.a+e[2]*t.b,e[1]*t.a+e[3]*t.b,e[0]*t.c+e[2]*t.d,e[1]*t.c+e[3]*t.d,e[0]*t.e+e[2]*t.f+e[4],e[1]*t.e+e[3]*t.f+e[5]]}static applyTransform(e,t,a=0){const r=e[a],i=e[a+1];e[a]=r*t[0]+i*t[2]+t[4];e[a+1]=r*t[1]+i*t[3]+t[5]}static applyTransformToBezier(e,t,a=0){const r=t[0],i=t[1],n=t[2],s=t[3],o=t[4],c=t[5];for(let t=0;t<6;t+=2){const l=e[a+t],h=e[a+t+1];e[a+t]=l*r+h*n+o;e[a+t+1]=l*i+h*s+c}}static applyInverseTransform(e,t){const a=e[0],r=e[1],i=t[0]*t[3]-t[1]*t[2];e[0]=(a*t[3]-r*t[2]+t[2]*t[5]-t[4]*t[3])/i;e[1]=(-a*t[1]+r*t[0]+t[4]*t[1]-t[5]*t[0])/i}static axialAlignedBoundingBox(e,t,a){const r=t[0],i=t[1],n=t[2],s=t[3],o=t[4],c=t[5],l=e[0],h=e[1],u=e[2],d=e[3];let f=r*l+o,g=f,p=r*u+o,m=p,b=s*h+c,y=b,w=s*d+c,S=w;if(0!==i||0!==n){const e=i*l,t=i*u,a=n*h,r=n*d;f+=a;m+=a;p+=r;g+=r;b+=e;S+=e;w+=t;y+=t}a[0]=Math.min(a[0],f,p,g,m);a[1]=Math.min(a[1],b,w,y,S);a[2]=Math.max(a[2],f,p,g,m);a[3]=Math.max(a[3],b,w,y,S)}static inverseTransform(e){const t=e[0]*e[3]-e[1]*e[2];return[e[3]/t,-e[1]/t,-e[2]/t,e[0]/t,(e[2]*e[5]-e[4]*e[3])/t,(e[4]*e[1]-e[5]*e[0])/t]}static singularValueDecompose2dScale(e,t){const a=e[0],r=e[1],i=e[2],n=e[3],s=a**2+r**2,o=a*i+r*n,c=i**2+n**2,l=(s+c)/2,h=Math.sqrt(l**2-(s*c-o**2));t[0]=Math.sqrt(l+h||1);t[1]=Math.sqrt(l-h||1)}static normalizeRect(e){const t=e.slice(0);if(e[0]>e[2]){t[0]=e[2];t[2]=e[0]}if(e[1]>e[3]){t[1]=e[3];t[3]=e[1]}return t}static intersect(e,t){const a=Math.max(Math.min(e[0],e[2]),Math.min(t[0],t[2])),r=Math.min(Math.max(e[0],e[2]),Math.max(t[0],t[2]));if(a>r)return null;const i=Math.max(Math.min(e[1],e[3]),Math.min(t[1],t[3])),n=Math.min(Math.max(e[1],e[3]),Math.max(t[1],t[3]));return i>n?null:[a,i,r,n]}static pointBoundingBox(e,t,a){a[0]=Math.min(a[0],e);a[1]=Math.min(a[1],t);a[2]=Math.max(a[2],e);a[3]=Math.max(a[3],t)}static rectBoundingBox(e,t,a,r,i){i[0]=Math.min(i[0],e,a);i[1]=Math.min(i[1],t,r);i[2]=Math.max(i[2],e,a);i[3]=Math.max(i[3],t,r)}static#e(e,t,a,r,i,n,s,o,c,l){if(c<=0||c>=1)return;const h=1-c,u=c*c,d=u*c,f=h*(h*(h*e+3*c*t)+3*u*a)+d*r,g=h*(h*(h*i+3*c*n)+3*u*s)+d*o;l[0]=Math.min(l[0],f);l[1]=Math.min(l[1],g);l[2]=Math.max(l[2],f);l[3]=Math.max(l[3],g)}static#t(e,t,a,r,i,n,s,o,c,l,h,u){if(Math.abs(c)<1e-12){Math.abs(l)>=1e-12&&this.#e(e,t,a,r,i,n,s,o,-h/l,u);return}const d=l**2-4*h*c;if(d<0)return;const f=Math.sqrt(d),g=2*c;this.#e(e,t,a,r,i,n,s,o,(-l+f)/g,u);this.#e(e,t,a,r,i,n,s,o,(-l-f)/g,u)}static bezierBoundingBox(e,t,a,r,i,n,s,o,c){c[0]=Math.min(c[0],e,s);c[1]=Math.min(c[1],t,o);c[2]=Math.max(c[2],e,s);c[3]=Math.max(c[3],t,o);this.#t(e,a,i,s,t,r,n,o,3*(3*(a-i)-e+s),6*(e-2*a+i),3*(a-e),c);this.#t(e,a,i,s,t,r,n,o,3*(3*(r-n)-t+o),6*(t-2*r+n),3*(r-t),c)}}const aa=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,728,711,710,729,733,731,730,732,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8226,8224,8225,8230,8212,8211,402,8260,8249,8250,8722,8240,8222,8220,8221,8216,8217,8218,8482,64257,64258,321,338,352,376,381,305,322,339,353,382,0,8364];function stringToPDFString(e,t=!1){if(e[0]>="ï"){let a;if("þ"===e[0]&&"ÿ"===e[1]){a="utf-16be";e.length%2==1&&(e=e.slice(0,-1))}else if("ÿ"===e[0]&&"þ"===e[1]){a="utf-16le";e.length%2==1&&(e=e.slice(0,-1))}else"ï"===e[0]&&"»"===e[1]&&"¿"===e[2]&&(a="utf-8");if(a)try{const r=new TextDecoder(a,{fatal:!0}),i=stringToBytes(e),n=r.decode(i);return t||!n.includes("")?n:n.replaceAll(/\x1b[^\x1b]*(?:\x1b|$)/g,"")}catch(e){warn(`stringToPDFString: "${e}".`)}}const a=[];for(let r=0,i=e.length;re+t,0)});const na=Symbol("CIRCULAR_REF"),sa=Symbol("EOF");let oa=Object.create(null),ca=Object.create(null),la=Object.create(null);class Name{constructor(e){this.name=e}static get(e){return ca[e]||=new Name(e)}}class Cmd{constructor(e){this.cmd=e}static get(e){return oa[e]||=new Cmd(e)}}const ha=function nonSerializableClosure(){return ha};class Dict{constructor(e=null){this._map=new Map;this.xref=e;this.objId=null;this.suppressEncryption=!1;this.__nonSerializable__=ha}assignXref(e){this.xref=e}get size(){return this._map.size}get(e,t,a){let r=this._map.get(e);if(void 0===r&&void 0!==t){r=this._map.get(t);void 0===r&&void 0!==a&&(r=this._map.get(a))}return r instanceof Ref&&this.xref?this.xref.fetch(r,this.suppressEncryption):r}async getAsync(e,t,a){let r=this._map.get(e);if(void 0===r&&void 0!==t){r=this._map.get(t);void 0===r&&void 0!==a&&(r=this._map.get(a))}return r instanceof Ref&&this.xref?this.xref.fetchAsync(r,this.suppressEncryption):r}getArray(e,t,a){let r=this._map.get(e);if(void 0===r&&void 0!==t){r=this._map.get(t);void 0===r&&void 0!==a&&(r=this._map.get(a))}r instanceof Ref&&this.xref&&(r=this.xref.fetch(r,this.suppressEncryption));if(Array.isArray(r)){r=r.slice();for(let e=0,t=r.length;e{unreachable("Should not call `set` on the empty dictionary.")};return shadow(this,"empty",e)}static merge({xref:e,dictArray:t,mergeSubDicts:a=!1}){const r=new Dict(e),i=new Map;for(const e of t)if(e instanceof Dict)for(const[t,r]of e._map){let e=i.get(t);if(void 0===e){e=[];i.set(t,e)}else if(!(a&&r instanceof Dict))continue;e.push(r)}for(const[t,a]of i){if(1===a.length||!(a[0]instanceof Dict)){r._map.set(t,a[0]);continue}const i=new Dict(e);for(const e of a)for(const[t,a]of e._map)i._map.has(t)||i._map.set(t,a);i.size>0&&r._map.set(t,i)}i.clear();return r.size>0?r:Dict.empty}clone(){const e=new Dict(this.xref);for(const t of this.getKeys())e.set(t,this.getRaw(t));return e}delete(e){this._map.delete(e)}}class Ref{constructor(e,t){this.num=e;this.gen=t}toString(){return 0===this.gen?`${this.num}R`:`${this.num}R${this.gen}`}static fromString(e){const t=la[e];if(t)return t;const a=/^(\d+)R(\d*)$/.exec(e);return a&&"0"!==a[1]?la[e]=new Ref(parseInt(a[1]),a[2]?parseInt(a[2]):0):null}static get(e,t){const a=0===t?`${e}R`:`${e}R${t}`;return la[a]||=new Ref(e,t)}}class RefSet{constructor(e=null){this._set=new Set(e?._set)}has(e){return this._set.has(e.toString())}put(e){this._set.add(e.toString())}remove(e){this._set.delete(e.toString())}[Symbol.iterator](){return this._set.values()}clear(){this._set.clear()}}class RefSetCache{constructor(){this._map=new Map}get size(){return this._map.size}get(e){return this._map.get(e.toString())}has(e){return this._map.has(e.toString())}put(e,t){this._map.set(e.toString(),t)}putAlias(e,t){this._map.set(e.toString(),this.get(t))}[Symbol.iterator](){return this._map.values()}clear(){this._map.clear()}*values(){yield*this._map.values()}*items(){for(const[e,t]of this._map)yield[Ref.fromString(e),t]}*keys(){for(const e of this._map.keys())yield Ref.fromString(e)}}function isName(e,t){return e instanceof Name&&(void 0===t||e.name===t)}function isCmd(e,t){return e instanceof Cmd&&(void 0===t||e.cmd===t)}function isDict(e,t){return e instanceof Dict&&(void 0===t||isName(e.get("Type"),t))}function isRefsEqual(e,t){return e.num===t.num&&e.gen===t.gen}class BaseStream{get length(){unreachable("Abstract getter `length` accessed")}get isEmpty(){unreachable("Abstract getter `isEmpty` accessed")}get isDataLoaded(){return shadow(this,"isDataLoaded",!0)}getByte(){unreachable("Abstract method `getByte` called")}getBytes(e){unreachable("Abstract method `getBytes` called")}async getImageData(e,t){return this.getBytes(e,t)}async asyncGetBytes(){unreachable("Abstract method `asyncGetBytes` called")}get isAsync(){return!1}get isAsyncDecoder(){return!1}get isImageStream(){return!1}get canAsyncDecodeImageFromBuffer(){return!1}async getTransferableImage(){return null}peekByte(){const e=this.getByte();-1!==e&&this.pos--;return e}peekBytes(e){const t=this.getBytes(e);this.pos-=t.length;return t}getUint16(){const e=this.getByte(),t=this.getByte();return-1===e||-1===t?-1:(e<<8)+t}getInt32(){return(this.getByte()<<24)+(this.getByte()<<16)+(this.getByte()<<8)+this.getByte()}getByteRange(e,t){unreachable("Abstract method `getByteRange` called")}getString(e){return bytesToString(this.getBytes(e))}skip(e){this.pos+=e||1}reset(){unreachable("Abstract method `reset` called")}moveStart(){unreachable("Abstract method `moveStart` called")}makeSubStream(e,t,a=null){unreachable("Abstract method `makeSubStream` called")}getBaseStreams(){return null}getOriginalStream(){return this.stream?.getOriginalStream()||this}}const ua=/^[1-9]\.\d$/,da=2**31-1,fa=[1,0,0,1,0,0],ga=["ColorSpace","ExtGState","Font","Pattern","Properties","Shading","XObject"],pa=["ExtGState","Font","Properties","XObject"];function getLookupTableFactory(e){let t;return function(){if(e){t=Object.create(null);e(t);e=null}return t}}class MissingDataException extends ea{constructor(e,t){super(`Missing data [${e}, ${t})`,"MissingDataException");this.begin=e;this.end=t}}class ParserEOFException extends ea{constructor(e){super(e,"ParserEOFException")}}class XRefEntryException extends ea{constructor(e){super(e,"XRefEntryException")}}class XRefParseException extends ea{constructor(e){super(e,"XRefParseException")}}function arrayBuffersToBytes(e){const t=e.length;if(0===t)return new Uint8Array(0);if(1===t)return new Uint8Array(e[0]);let a=0;for(let r=0;r0,"The number should be a positive integer.");const a="M".repeat(e/1e3|0)+ma[e%1e3/100|0]+ma[10+(e%100/10|0)]+ma[20+e%10];return t?a.toLowerCase():a}function log2(e){return e>0?Math.ceil(Math.log2(e)):0}function readInt8(e,t){return e[t]<<24>>24}function readInt16(e,t){return(e[t]<<24|e[t+1]<<16)>>16}function readUint16(e,t){return e[t]<<8|e[t+1]}function readUint32(e,t){return(e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3])>>>0}function isWhiteSpace(e){return 32===e||9===e||13===e||10===e}function isNumberArray(e,t){return Array.isArray(e)?(null===t||e.length===t)&&e.every(e=>"number"==typeof e):ArrayBuffer.isView(e)&&!(e instanceof BigInt64Array||e instanceof BigUint64Array)&&(null===t||e.length===t)}function lookupMatrix(e,t){return isNumberArray(e,6)?e:t}function lookupRect(e,t){return isNumberArray(e,4)?e:t}function lookupNormalRect(e,t){return isNumberArray(e,4)?Util.normalizeRect(e):t}function parseXFAPath(e){const t=/(.+)\[(\d+)\]$/;return e.split(".").map(e=>{const a=e.match(t);return a?{name:a[1],pos:parseInt(a[2],10)}:{name:e,pos:0}})}function escapePDFName(e){const t=[];let a=0;for(let r=0,i=e.length;r126||35===i||40===i||41===i||60===i||62===i||91===i||93===i||123===i||125===i||47===i||37===i){a"\n"===e?"\\n":"\r"===e?"\\r":`\\${e}`)}function _collectJS(e,t,a,r){if(!e)return;let i=null;if(e instanceof Ref){if(r.has(e))return;i=e;r.put(i);e=t.fetch(e)}if(Array.isArray(e))for(const i of e)_collectJS(i,t,a,r);else if(e instanceof Dict){if(isName(e.get("S"),"JavaScript")){const t=e.get("JS");let r;t instanceof BaseStream?r=t.getString():"string"==typeof t&&(r=t);r&&=stringToPDFString(r,!0).replaceAll("\0","");r&&a.push(r.trim())}_collectJS(e.getRaw("Next"),t,a,r)}i&&r.remove(i)}function collectActions(e,t,a){const r=Object.create(null),i=getInheritableProperty({dict:t,key:"AA",stopWhenFound:!1});if(i)for(let t=i.length-1;t>=0;t--){const n=i[t];if(n instanceof Dict)for(const t of n.getKeys()){const i=a[t];if(!i)continue;const s=[];_collectJS(n.getRaw(t),e,s,new RefSet);s.length>0&&(r[i]=s)}}if(t.has("A")){const a=[];_collectJS(t.get("A"),e,a,new RefSet);a.length>0&&(r.Action=a)}return objectSize(r)>0?r:null}const ba={60:"<",62:">",38:"&",34:""",39:"'"};function*codePointIter(e){for(let t=0,a=e.length;t55295&&(a<57344||a>65533)&&t++;yield a}}function encodeToXmlString(e){const t=[];let a=0;for(let r=0,i=e.length;r55295&&(i<57344||i>65533)&&r++;a=r+1}}if(0===t.length)return e;a: ${e}.`);return!1}return!0}function validateCSSFont(e){const t=new Set(["100","200","300","400","500","600","700","800","900","1000","normal","bold","bolder","lighter"]),{fontFamily:a,fontWeight:r,italicAngle:i}=e;if(!validateFontName(a,!0))return!1;const n=r?r.toString():"";e.fontWeight=t.has(n)?n:"400";const s=parseFloat(i);e.italicAngle=isNaN(s)||s<-90||s>90?"14":i.toString();return!0}function recoverJsURL(e){const t=new RegExp("^\\s*("+["app.launchURL","window.open","xfa.host.gotoURL"].join("|").replaceAll(".","\\.")+")\\((?:'|\")([^'\"]*)(?:'|\")(?:,\\s*(\\w+)\\)|\\))","i").exec(e);return t?.[2]?{url:t[2],newWindow:"app.launchURL"===t[1]&&"true"===t[3]}:null}function numberToString(e){if(Number.isInteger(e))return e.toString();const t=Math.round(100*e);return t%100==0?(t/100).toString():t%10==0?e.toFixed(1):e.toFixed(2)}function getNewAnnotationsMap(e){if(!e)return null;const t=new Map;for(const[a,r]of e){if(!a.startsWith(f))continue;let e=t.get(r.pageIndex);if(!e){e=[];t.set(r.pageIndex,e)}e.push(r)}return t.size>0?t:null}function stringToAsciiOrUTF16BE(e){return null==e||function isAscii(e){if("string"!=typeof e)return!1;return!e||/^[\x00-\x7F]*$/.test(e)}(e)?e:stringToUTF16String(e,!0)}function stringToUTF16HexString(e){const t=[];for(let a=0,r=e.length;a>8&255],ta[255&r])}return t.join("")}function stringToUTF16String(e,t=!1){const a=[];t&&a.push("þÿ");for(let t=0,r=e.length;t>8&255),String.fromCharCode(255&r))}return a.join("")}function getRotationMatrix(e,t,a){switch(e){case 90:return[0,1,-1,0,t,0];case 180:return[-1,0,0,-1,t,a];case 270:return[0,-1,1,0,0,a];default:throw new Error("Invalid rotation")}}function getSizeInBytes(e){return Math.ceil(Math.ceil(Math.log2(1+e))/8)}class QCMS{static#a=null;static _memory=null;static _mustAddAlpha=!1;static _destBuffer=null;static _destOffset=0;static _destLength=0;static _cssColor="";static _makeHexColor=null;static get _memoryArray(){const e=this.#a;return e?.byteLength?e:this.#a=new Uint8Array(this._memory.buffer)}}let ya;const wa="undefined"!=typeof TextDecoder?new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}):{decode:()=>{throw Error("TextDecoder not available")}};"undefined"!=typeof TextDecoder&&wa.decode();let Sa=null;function getUint8ArrayMemory0(){null!==Sa&&0!==Sa.byteLength||(Sa=new Uint8Array(ya.memory.buffer));return Sa}let xa=0;function passArray8ToWasm0(e,t){const a=t(1*e.length,1)>>>0;getUint8ArrayMemory0().set(e,a/1);xa=e.length;return a}const Aa=Object.freeze({RGB8:0,0:"RGB8",RGBA8:1,1:"RGBA8",BGRA8:2,2:"BGRA8",Gray8:3,3:"Gray8",GrayA8:4,4:"GrayA8",CMYK:5,5:"CMYK"}),ka=Object.freeze({Perceptual:0,0:"Perceptual",RelativeColorimetric:1,1:"RelativeColorimetric",Saturation:2,2:"Saturation",AbsoluteColorimetric:3,3:"AbsoluteColorimetric"});function __wbg_get_imports(){const e={wbg:{}};e.wbg.__wbg_copyresult_b08ee7d273f295dd=function(e,t){!function copy_result(e,t){const{_mustAddAlpha:a,_destBuffer:r,_destOffset:i,_destLength:n,_memoryArray:s}=QCMS;if(t!==n)if(a)for(let a=e,n=e+t,o=i;a>>0,t>>>0)};e.wbg.__wbg_copyrgb_d60ce17bb05d9b67=function(e){!function copy_rgb(e){const{_destBuffer:t,_destOffset:a,_memoryArray:r}=QCMS;t[a]=r[e];t[a+1]=r[e+1];t[a+2]=r[e+2]}(e>>>0)};e.wbg.__wbg_makecssRGB_893bf0cd9fdb302d=function(e){!function make_cssRGB(e){const{_memoryArray:t}=QCMS;QCMS._cssColor=QCMS._makeHexColor(t[e],t[e+1],t[e+2])}(e>>>0)};e.wbg.__wbindgen_init_externref_table=function(){const e=ya.__wbindgen_export_0,t=e.grow(4);e.set(0,void 0);e.set(t+0,void 0);e.set(t+1,null);e.set(t+2,!0);e.set(t+3,!1)};e.wbg.__wbindgen_throw=function(e,t){throw new Error(function getStringFromWasm0(e,t){e>>>=0;return wa.decode(getUint8ArrayMemory0().subarray(e,e+t))}(e,t))};return e}function __wbg_finalize_init(e,t){ya=e.exports;__wbg_init.__wbindgen_wasm_module=t;Sa=null;ya.__wbindgen_start();return ya}async function __wbg_init(e){if(void 0!==ya)return ya;void 0!==e&&(Object.getPrototypeOf(e)===Object.prototype?({module_or_path:e}=e):console.warn("using deprecated parameters for the initialization function; pass a single object instead"));const t=__wbg_get_imports();("string"==typeof e||"function"==typeof Request&&e instanceof Request||"function"==typeof URL&&e instanceof URL)&&(e=fetch(e));const{instance:a,module:r}=await async function __wbg_load(e,t){if("function"==typeof Response&&e instanceof Response){if("function"==typeof WebAssembly.instantiateStreaming)try{return await WebAssembly.instantiateStreaming(e,t)}catch(t){if("application/wasm"==e.headers.get("Content-Type"))throw t;console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",t)}const a=await e.arrayBuffer();return await WebAssembly.instantiate(a,t)}{const a=await WebAssembly.instantiate(e,t);return a instanceof WebAssembly.Instance?{instance:a,module:e}:a}}(await e,t);return __wbg_finalize_init(a,r)}class ColorSpace{static#r=new Uint8ClampedArray(3);constructor(e,t){this.name=e;this.numComps=t}getRgb(e,t,a=new Uint8ClampedArray(3)){this.getRgbItem(e,t,a,0);return a}getRgbHex(e,t){const a=this.getRgb(e,t,ColorSpace.#r);return Util.makeHexColor(a[0],a[1],a[2])}getRgbItem(e,t,a,r){unreachable("Should not call ColorSpace.getRgbItem")}getRgbBuffer(e,t,a,r,i,n,s){unreachable("Should not call ColorSpace.getRgbBuffer")}getOutputLength(e,t){unreachable("Should not call ColorSpace.getOutputLength")}isPassthrough(e){return!1}isDefaultDecode(e,t){return ColorSpace.isDefaultDecode(e,this.numComps)}fillRgb(e,t,a,r,i,n,s,o,c){const l=t*a;let h=null;const u=1<u&&"DeviceGray"!==this.name&&"DeviceRGB"!==this.name){const t=s<=8?new Uint8Array(u):new Uint16Array(u);for(let e=0;e=.99554525?1:MathClamp(1.055*e**(1/2.4)-.055,0,1)}#b(e){return e<0?-this.#b(-e):e>8?((e+16)/116)**3:e*CalRGBCS.#d}#y(e,t,a){if(0===e[0]&&0===e[1]&&0===e[2]){a[0]=t[0];a[1]=t[1];a[2]=t[2];return}const r=this.#b(0),i=(1-r)/(1-this.#b(e[0])),n=1-i,s=(1-r)/(1-this.#b(e[1])),o=1-s,c=(1-r)/(1-this.#b(e[2])),l=1-c;a[0]=t[0]*i+n;a[1]=t[1]*s+o;a[2]=t[2]*c+l}#w(e,t,a){if(1===e[0]&&1===e[2]){a[0]=t[0];a[1]=t[1];a[2]=t[2];return}const r=a;this.#f(CalRGBCS.#n,t,r);const i=CalRGBCS.#l;this.#g(e,r,i);this.#f(CalRGBCS.#s,i,a)}#S(e,t,a){const r=a;this.#f(CalRGBCS.#n,t,r);const i=CalRGBCS.#l;this.#p(e,r,i);this.#f(CalRGBCS.#s,i,a)}#i(e,t,a,r,i){const n=MathClamp(e[t]*i,0,1),s=MathClamp(e[t+1]*i,0,1),o=MathClamp(e[t+2]*i,0,1),c=1===n?1:n**this.GR,l=1===s?1:s**this.GG,h=1===o?1:o**this.GB,u=this.MXA*c+this.MXB*l+this.MXC*h,d=this.MYA*c+this.MYB*l+this.MYC*h,f=this.MZA*c+this.MZB*l+this.MZC*h,g=CalRGBCS.#h;g[0]=u;g[1]=d;g[2]=f;const p=CalRGBCS.#u;this.#w(this.whitePoint,g,p);const m=CalRGBCS.#h;this.#y(this.blackPoint,p,m);const b=CalRGBCS.#u;this.#S(CalRGBCS.#c,m,b);const y=CalRGBCS.#h;this.#f(CalRGBCS.#o,b,y);a[r]=255*this.#m(y[0]);a[r+1]=255*this.#m(y[1]);a[r+2]=255*this.#m(y[2])}getRgbItem(e,t,a,r){this.#i(e,t,a,r,1)}getRgbBuffer(e,t,a,r,i,n,s){const o=1/((1<this.amax||this.bmin>this.bmax){info("Invalid Range, falling back to defaults");this.amin=-100;this.amax=100;this.bmin=-100;this.bmax=100}}#x(e){return e>=6/29?e**3:108/841*(e-4/29)}#A(e,t,a,r){return a+e*(r-a)/t}#i(e,t,a,r,i){let n=e[t],s=e[t+1],o=e[t+2];if(!1!==a){n=this.#A(n,a,0,100);s=this.#A(s,a,this.amin,this.amax);o=this.#A(o,a,this.bmin,this.bmax)}s>this.amax?s=this.amax:sthis.bmax?o=this.bmax:ofunction qcms_convert_one(e,t,a){ya.qcms_convert_one(e,t,a)}(this.#k,255*e[t],a);break;case 3:r=Aa.RGB8;this.#C=(e,t,a)=>function qcms_convert_three(e,t,a,r,i){ya.qcms_convert_three(e,t,a,r,i)}(this.#k,255*e[t],255*e[t+1],255*e[t+2],a);break;case 4:r=Aa.CMYK;this.#C=(e,t,a)=>function qcms_convert_four(e,t,a,r,i,n){ya.qcms_convert_four(e,t,a,r,i,n)}(this.#k,255*e[t],255*e[t+1],255*e[t+2],255*e[t+3],a);break;default:throw new Error(`Unsupported number of components: ${a}`)}this.#k=function qcms_transformer_from_memory(e,t,a){const r=passArray8ToWasm0(e,ya.__wbindgen_malloc),i=xa;return ya.qcms_transformer_from_memory(r,i,t,a)>>>0}(e,r,ka.Perceptual);if(!this.#k)throw new Error("Failed to create ICC color space");IccColorSpace.#I||=new FinalizationRegistry(e=>{!function qcms_drop_transformer(e){ya.qcms_drop_transformer(e)}(e)});IccColorSpace.#I.register(this,this.#k)}getRgbHex(e,t){this.#C(e,t,!0);return QCMS._cssColor}getRgbItem(e,t,a,r){QCMS._destBuffer=a;QCMS._destOffset=r;QCMS._destLength=3;this.#C(e,t,!1);QCMS._destBuffer=null}getRgbBuffer(e,t,a,r,i,n,s){e=e.subarray(t,t+a*this.numComps);if(8!==n){const t=255/((1<=this.end?-1:this.bytes[this.pos++]}getBytes(e){const t=this.bytes,a=this.pos,r=this.end;if(!e){this.pos=r;return t.subarray(a,r)}let i=a+e;i>r&&(i=r);this.pos=i;return t.subarray(a,i)}getByteRange(e,t){e<0&&(e=0);t>this.end&&(t=this.end);return this.bytes.subarray(e,t)}reset(){this.pos=this.start}moveStart(){this.start=this.pos}makeSubStream(e,t,a=null){return new Stream(this.bytes.buffer,e,t,a)}clone(){return new Stream(this.bytes.buffer,this.start,this.end-this.start,this.dict.clone())}}class StringStream extends Stream{constructor(e){super(stringToBytes(e))}}class NullStream extends Stream{constructor(){super(new Uint8Array(0))}}class ChunkedStream extends Stream{progressiveDataLength=0;_lastSuccessfulEnsureByteChunk=-1;_loadedChunks=new Set;constructor(e,t,a){super(new Uint8Array(e),0,e,null);this.chunkSize=t;this.numChunks=Math.ceil(e/t);this.manager=a}getMissingChunks(){const e=[];for(let t=0,a=this.numChunks;t=this.end?this.numChunks:Math.floor(t/this.chunkSize);for(let e=a;ethis.numChunks)&&t!==this._lastSuccessfulEnsureByteChunk){if(!this._loadedChunks.has(t))throw new MissingDataException(e,e+1);this._lastSuccessfulEnsureByteChunk=t}}ensureRange(e,t){if(e>=t)return;if(t<=this.progressiveDataLength)return;const a=Math.floor(e/this.chunkSize);if(a>this.numChunks)return;const r=Math.min(Math.floor((t-1)/this.chunkSize)+1,this.numChunks);for(let i=a;i=this.end)return-1;e>=this.progressiveDataLength&&this.ensureByte(e);return this.bytes[this.pos++]}getBytes(e){const t=this.bytes,a=this.pos,r=this.end;if(!e){r>this.progressiveDataLength&&this.ensureRange(a,r);return t.subarray(a,r)}let i=a+e;i>r&&(i=r);i>this.progressiveDataLength&&this.ensureRange(a,i);this.pos=i;return t.subarray(a,i)}getByteRange(e,t){e<0&&(e=0);t>this.end&&(t=this.end);t>this.progressiveDataLength&&this.ensureRange(e,t);return this.bytes.subarray(e,t)}makeSubStream(e,t,a=null){t?e+t>this.progressiveDataLength&&this.ensureRange(e,e+t):e>=this.progressiveDataLength&&this.ensureByte(e);function ChunkedStreamSubstream(){}ChunkedStreamSubstream.prototype=Object.create(this);ChunkedStreamSubstream.prototype.getMissingChunks=function(){const e=this.chunkSize,t=Math.floor(this.start/e),a=Math.floor((this.end-1)/e)+1,r=[];for(let e=t;e{const readChunk=({value:i,done:n})=>{try{if(n){e(arrayBuffersToBytes(r));r=null;return}r.push(i);a.read().then(readChunk,t)}catch(e){t(e)}};a.read().then(readChunk,t)}).then(t=>{this.aborted||this.onReceiveData({chunk:t,begin:e})})}requestAllChunks(e=!1){if(!e){const e=this.stream.getMissingChunks();this._requestChunks(e)}return this._loadedStreamCapability.promise}_requestChunks(e){const t=this.currRequestId++,a=new Set;this._chunksNeededByRequest.set(t,a);for(const t of e)this.stream.hasChunk(t)||a.add(t);if(0===a.size)return Promise.resolve();const r=Promise.withResolvers();this._promisesByRequest.set(t,r);const i=[];for(const e of a){let a=this._requestsByChunk.get(e);if(!a){a=[];this._requestsByChunk.set(e,a);i.push(e)}a.push(t)}if(i.length>0){const e=this.groupChunks(i);for(const t of e){const e=t.beginChunk*this.chunkSize,a=Math.min(t.endChunk*this.chunkSize,this.length);this.sendRequest(e,a).catch(r.reject)}}return r.promise.catch(e=>{if(!this.aborted)throw e})}getStream(){return this.stream}requestRange(e,t){t=Math.min(t,this.length);const a=this.getBeginChunk(e),r=this.getEndChunk(t),i=[];for(let e=a;ee-t);return this._requestChunks(t)}groupChunks(e){const t=[];let a=-1,r=-1;for(let i=0,n=e.length;i=0&&r+1!==n){t.push({beginChunk:a,endChunk:r+1});a=n}i+1===e.length&&t.push({beginChunk:a,endChunk:n+1});r=n}return t}onReceiveData(e){const{chunkSize:t,length:a,stream:r}=this,i=e.chunk,n=void 0===e.begin,s=n?r.progressiveDataLength:e.begin,o=s+i.byteLength,c=Math.floor(s/t),l=o0||h.push(a)}}}if(!this.disableAutoFetch&&0===this._requestsByChunk.size){let e;if(1===r.numChunksLoaded){const t=r.numChunks-1;r.hasChunk(t)||(e=t)}else e=r.nextEmptyChunk(l);Number.isInteger(e)&&this._requestChunks([e])}for(const e of h){const t=this._promisesByRequest.get(e);this._promisesByRequest.delete(e);t.resolve()}this.msgHandler.send("DocProgress",{loaded:r.numChunksLoaded*t,total:a})}onError(e){this._loadedStreamCapability.reject(e)}getBeginChunk(e){return Math.floor(e/this.chunkSize)}getEndChunk(e){return Math.floor((e-1)/this.chunkSize)+1}abort(e){this.aborted=!0;this.pdfStream?.cancelAllRequests(e);for(const t of this._promisesByRequest.values())t.reject(e)}}function convertToRGBA(e){switch(e.kind){case F:return convertBlackAndWhiteToRGBA(e);case T:return function convertRGBToRGBA({src:e,srcPos:t=0,dest:a,destPos:r=0,width:i,height:n}){let s=0;const o=i*n*3,c=o>>2,l=new Uint32Array(e.buffer,t,c);if(FeatureTest.isLittleEndian){for(;s>>24|t<<8|4278190080;a[r+2]=t>>>16|i<<16|4278190080;a[r+3]=i>>>8|4278190080}for(let i=4*s,n=t+o;i>>8|255;a[r+2]=t<<16|i>>>16|255;a[r+3]=i<<8|255}for(let i=4*s,n=t+o;i>3,u=7&r,d=e.length;a=new Uint32Array(a.buffer);let f=0;for(let r=0;ra||t>a)return!0;const r=e*t;if(this._hasMaxArea)return r>this.MAX_AREA;if(r(this.MAX_AREA=this.#O**2)}static getReducePowerForJPX(e,t,a){const r=e*t,i=2**30/(4*a);if(!this.needsToBeResized(e,t))return r>i?Math.ceil(Math.log2(r/i)):0;const{MAX_DIM:n,MAX_AREA:s}=this,o=Math.max(e/n,t/n,Math.sqrt(r/Math.min(i,s)));return Math.ceil(Math.log2(o))}static get MAX_DIM(){return shadow(this,"MAX_DIM",this._guessMax(2048,65537,0,1))}static get MAX_AREA(){this._hasMaxArea=!0;return shadow(this,"MAX_AREA",this._guessMax(this.#O,this.MAX_DIM,128,0)**2)}static set MAX_AREA(e){if(e>=0){this._hasMaxArea=!0;shadow(this,"MAX_AREA",e)}}static setOptions({canvasMaxAreaInBytes:e=-1,isImageDecoderSupported:t=!1}){this._hasMaxArea||(this.MAX_AREA=e>>2);this.#D=t}static _areGoodDims(e,t){try{const a=new OffscreenCanvas(e,t),r=a.getContext("2d");r.fillRect(0,0,1,1);const i=r.getImageData(0,0,1,1).data[3];a.width=a.height=1;return 0!==i}catch{return!1}}static _guessMax(e,t,a,r){for(;e+a+1da){const e=this.#M();if(e)return e}const r=this._encodeBMP();let i,n;if(await ImageResizer.canUseImageDecoder){i=new ImageDecoder({data:r,type:"image/bmp",preferAnimation:!1,transfer:[r.buffer]});n=i.decode().catch(e=>{warn(`BMP image decoding failed: ${e}`);return createImageBitmap(new Blob([this._encodeBMP().buffer],{type:"image/bmp"}))}).finally(()=>{i.close()})}else n=createImageBitmap(new Blob([r.buffer],{type:"image/bmp"}));const{MAX_AREA:s,MAX_DIM:o}=ImageResizer,c=Math.max(t/o,a/o,Math.sqrt(t*a/s)),l=Math.max(c,2),h=Math.round(10*(c+1.25))/10/l,u=Math.floor(Math.log2(h)),d=new Array(u+2).fill(2);d[0]=l;d.splice(-1,1,h/(1<>s,c=r>>s;let l,h=r;try{l=new Uint8Array(n)}catch{let e=Math.floor(Math.log2(n+1));for(;;)try{l=new Uint8Array(2**e-1);break}catch{e-=1}h=Math.floor((2**e-1)/(4*a));const t=a*h*4;t>s;e>3,s=a+3&-4;if(a!==s){const e=new Uint8Array(s*t);let r=0;for(let n=0,o=t*a;n{throw t},a=import.meta.url;try{new URL(".",a).href}catch{}0;console.log.bind(console);var r,i,n,s,o,c=console.error.bind(console),l=!1,h=!1;function updateMemoryViews(){var e=d.buffer;s=new Int8Array(e);new Int16Array(e);o=new Uint8Array(e);new Uint16Array(e);new Int32Array(e);new Uint32Array(e);new Float32Array(e);new Float64Array(e);new BigInt64Array(e);new BigUint64Array(e)}class ExitStatus{name="ExitStatus";constructor(e){this.message=`Program terminated with exit(${e})`;this.status=e}}var u,d,callRuntimeCallbacks=e=>{for(;e.length>0;)e.shift()(t)},f=[],addOnPostRun=e=>f.push(e),g=[],addOnPreRun=e=>g.push(e),p=!0,m=0,b={},handleException=e=>{if(e instanceof ExitStatus||"unwind"==e)return r;quit_(0,e)},keepRuntimeAlive=()=>p||m>0,_proc_exit=e=>{r=e;if(!keepRuntimeAlive()){t.onExit?.(e);l=!0}quit_(0,new ExitStatus(e))},_exit=(e,t)=>{r=e;_proc_exit(e)},callUserCallback=e=>{if(!l)try{e();(()=>{if(!keepRuntimeAlive())try{_exit(r)}catch(e){handleException(e)}})()}catch(e){handleException(e)}},alignMemory=(e,t)=>Math.ceil(e/t)*t,growMemory=e=>{var t=(e-d.buffer.byteLength+65535)/65536|0;try{d.grow(t);updateMemoryViews();return 1}catch(e){}};t.noExitRuntime&&(p=t.noExitRuntime);t.print&&t.print;t.printErr&&(c=t.printErr);t.wasmBinary&&t.wasmBinary;t.arguments&&t.arguments;t.thisProgram&&t.thisProgram;if(t.preInit){"function"==typeof t.preInit&&(t.preInit=[t.preInit]);for(;t.preInit.length>0;)t.preInit.shift()()}t.writeArrayToMemory=(e,t)=>{s.set(e,t)};var y,w={e:()=>function abort(e){t.onAbort?.(e);c(e="Aborted("+e+")");l=!0;e+=". Build with -sASSERTIONS for more info.";var a=new WebAssembly.RuntimeError(e);n?.(a);throw a}(""),b:()=>{p=!1;m=0},c:(e,t)=>{if(b[e]){clearTimeout(b[e].id);delete b[e]}if(!t)return 0;var a=setTimeout(()=>{delete b[e];callUserCallback(()=>u(e,performance.now()))},t);b[e]={id:a,timeout_ms:t};return 0},d:e=>{var t=o.length,a=2147483648;if((e>>>=0)>a)return!1;for(var r=1;r<=4;r*=2){var i=t*(1+.2/r);i=Math.min(i,e+100663296);var n=Math.min(a,alignMemory(Math.max(e,i),65536));if(growMemory(n))return!0}return!1},a:_proc_exit,f:function _setImageData(e,a,r,i){if(r===a){t.imageData=new Uint8ClampedArray(o.subarray(e,e+r*i));return}const n=a*i,s=t.imageData=new Uint8ClampedArray(n);for(let t=e,i=0;i{t.instantiateWasm(e,(e,t)=>{a(receiveInstance(e))})})}();!function run(){!function preRun(){if(t.preRun){"function"==typeof t.preRun&&(t.preRun=[t.preRun]);for(;t.preRun.length;)addOnPreRun(t.preRun.shift())}callRuntimeCallbacks(g)}();function doRun(){t.calledRun=!0;if(!l){!function initRuntime(){h=!0;y.h()}();i?.(t);t.onRuntimeInitialized?.();!function postRun(){if(t.postRun){"function"==typeof t.postRun&&(t.postRun=[t.postRun]);for(;t.postRun.length;)addOnPostRun(t.postRun.shift())}callRuntimeCallbacks(f)}()}}if(t.setStatus){t.setStatus("Running...");setTimeout(()=>{setTimeout(()=>t.setStatus(""),1);doRun()},1)}else doRun()}();return h?t:new Promise((e,t)=>{i=e;n=t})};class JBig2Error extends ea{constructor(e){super(e,"Jbig2Error")}}class JBig2WasmImage{static#R=null;static#B=null;static#N=null;static#v=!0;static#P=!0;static#F=null;static setOptions({handler:e,useWasm:t,useWorkerFetch:a,wasmUrl:r}){this.#v=t;this.#P=a;this.#F=r;a||(this.#B=e)}static async#E(e,t,a){const r="jbig2.wasm";try{this.#R||(this.#P?this.#R=await fetchBinaryData(`${this.#F}${r}`):this.#R=await this.#B.sendWithPromise("FetchBinaryData",{type:"wasmFactory",filename:r}));return a((await WebAssembly.instantiate(this.#R,t)).instance)}catch(t){warn(`JBig2Image#instantiateWasm: ${t}`);return e(null)}finally{this.#B=null}}static async decode(e,t,a,r){if(!this.#N){const{promise:e,resolve:t}=Promise.withResolvers(),a=[e];this.#v?a.push(Ca({warn,instantiateWasm:this.#E.bind(this,t)})):t(null);this.#N=Promise.race(a)}const i=await this.#N;if(!i)throw new JBig2Error("JBig2 failed to initialize");let n,s;try{const o=e.length;n=i._malloc(o);i.writeArrayToMemory(e,n);const c=r?r.length:0;if(c>0){s=i._malloc(c);i.writeArrayToMemory(r,s)}i._jbig2_decode(n,o,t,a,s,c);if(!i.imageData)throw new JBig2Error("Unknown error");const{imageData:l}=i;i.imageData=null;return l}finally{n&&i._free(n);s&&i._free(s)}}static cleanup(){this.#N=null}}const va=new Uint8Array(0);class DecodeStream extends BaseStream{constructor(e){super();this._rawMinBufferLength=e||0;this.pos=0;this.bufferLength=0;this.eof=!1;this.buffer=va;this.minBufferLength=512;if(e)for(;this.minBufferLengthi&&(r=i)}else{for(;!this.eof;)this.readBlock(t);r=this.bufferLength}this.pos=r;return this.buffer.subarray(a,r)}async getImageData(e,t){if(!this.canAsyncDecodeImageFromBuffer)return this.isAsyncDecoder?this.decodeImage(null,t):this.getBytes(e,t);const a=await this.stream.asyncGetBytes();return this.decodeImage(a,t)}reset(){this.pos=0}makeSubStream(e,t,a=null){if(void 0===t)for(;!this.eof;)this.readBlock();else{const a=e+t;for(;this.bufferLength<=a&&!this.eof;)this.readBlock()}return new Stream(this.buffer,e,t,a)}getBaseStreams(){return this.stream?this.stream.getBaseStreams():null}clone(){for(;!this.eof;)this.readBlock();return new Stream(this.buffer,this.start,this.end-this.start,this.dict.clone())}}class StreamsSequenceStream extends DecodeStream{constructor(e,t=null){e=e.filter(e=>e instanceof BaseStream&&!e.isImageStream);let a=0;for(const t of e)a+=t instanceof DecodeStream?t._rawMinBufferLength:t.length;super(a);this.streams=e;this._onError=t}readBlock(){const e=this.streams;if(0===e.length){this.eof=!0;return}const t=e.shift();let a;try{a=t.getBytes()}catch(e){if(this._onError){this._onError(e,t.dict?.objId);return}throw e}const r=this.bufferLength,i=r+a.length;this.ensureBuffer(i).set(a,r);this.bufferLength=i}getBaseStreams(){const e=[];for(const t of this.streams){const a=t.getBaseStreams();a&&e.push(...a)}return e.length>0?e:null}}class ColorSpaceUtils{static parse({cs:e,xref:t,resources:a=null,pdfFunctionFactory:r,globalColorSpaceCache:i,localColorSpaceCache:n,asyncIfNotCached:s=!1}){const o={xref:t,resources:a,pdfFunctionFactory:r,globalColorSpaceCache:i,localColorSpaceCache:n};let c,l,h;if(e instanceof Ref){l=e;const a=i.getByRef(l)||n.getByRef(l);if(a)return a;e=t.fetch(e)}if(e instanceof Name){c=e.name;const t=n.getByName(c);if(t)return t}try{h=this.#L(e,o)}catch(e){if(s&&!(e instanceof MissingDataException))return Promise.reject(e);throw e}if(c||l){n.set(c,l,h);l&&i.set(null,l,h)}return s?Promise.resolve(h):h}static#_(e,t){const{globalColorSpaceCache:a}=t;let r;if(e instanceof Ref){r=e;const t=a.getByRef(r);if(t)return t}const i=this.#L(e,t);r&&a.set(null,r,i);return i}static#L(e,t){const{xref:a,resources:r,pdfFunctionFactory:i,globalColorSpaceCache:n}=t;if((e=a.fetchIfRef(e))instanceof Name)switch(e.name){case"G":case"DeviceGray":return this.gray;case"RGB":case"DeviceRGB":return this.rgb;case"DeviceRGBA":return this.rgba;case"CMYK":case"DeviceCMYK":return this.cmyk;case"Pattern":return new PatternCS(null);default:if(r instanceof Dict){const a=r.get("ColorSpace");if(a instanceof Dict){const r=a.get(e.name);if(r){if(r instanceof Name)return this.#L(r,t);e=r;break}}}warn(`Unrecognized ColorSpace: ${e.name}`);return this.gray}if(Array.isArray(e)){const r=a.fetchIfRef(e[0]).name;let s,o,c,l,h,u;switch(r){case"G":case"DeviceGray":return this.gray;case"RGB":case"DeviceRGB":return this.rgb;case"CMYK":case"DeviceCMYK":return this.cmyk;case"CalGray":s=a.fetchIfRef(e[1]);l=s.getArray("WhitePoint");h=s.getArray("BlackPoint");u=s.get("Gamma");return new CalGrayCS(l,h,u);case"CalRGB":s=a.fetchIfRef(e[1]);l=s.getArray("WhitePoint");h=s.getArray("BlackPoint");u=s.getArray("Gamma");const d=s.getArray("Matrix");return new CalRGBCS(l,h,u,d);case"ICCBased":const f=e[1]instanceof Ref;if(f){const t=n.getByRef(e[1]);if(t)return t}const g=a.fetchIfRef(e[1]),p=g.dict;o=p.get("N");if(IccColorSpace.isUsable)try{const t=new IccColorSpace(g.getBytes(),"ICCBased",o);f&&n.set(null,e[1],t);return t}catch(t){if(t instanceof MissingDataException)throw t;warn(`ICCBased color space (${e[1]}): "${t}".`)}const m=p.getRaw("Alternate");if(m){const e=this.#_(m,t);if(e.numComps===o)return e;warn("ICCBased color space: Ignoring incorrect /Alternate entry.")}if(1===o)return this.gray;if(3===o)return this.rgb;if(4===o)return this.cmyk;break;case"Pattern":c=e[1]||null;c&&(c=this.#_(c,t));return new PatternCS(c);case"I":case"Indexed":c=this.#_(e[1],t);const b=MathClamp(a.fetchIfRef(e[2]),0,255),y=a.fetchIfRef(e[3]);return new IndexedCS(c,b,y);case"Separation":case"DeviceN":const w=a.fetchIfRef(e[1]);o=Array.isArray(w)?w.length:1;c=this.#_(e[2],t);const S=i.create(e[3]);return new AlternateCS(o,c,S);case"Lab":s=a.fetchIfRef(e[1]);l=s.getArray("WhitePoint");h=s.getArray("BlackPoint");const x=s.getArray("Range");return new LabCS(l,h,x);default:warn(`Unimplemented ColorSpace object: ${r}`);return this.gray}}warn(`Unrecognized ColorSpace object: ${e}`);return this.gray}static get gray(){return shadow(this,"gray",new DeviceGrayCS)}static get rgb(){return shadow(this,"rgb",new DeviceRgbCS)}static get rgba(){return shadow(this,"rgba",new DeviceRgbaCS)}static get cmyk(){if(CmykICCBasedCS.isUsable)try{return shadow(this,"cmyk",new CmykICCBasedCS)}catch{warn("CMYK fallback: DeviceCMYK")}return shadow(this,"cmyk",new DeviceCmykCS)}}class JpegError extends ea{constructor(e){super(e,"JpegError")}}class DNLMarkerError extends ea{constructor(e,t){super(e,"DNLMarkerError");this.scanLines=t}}class EOIMarkerError extends ea{constructor(e){super(e,"EOIMarkerError")}}const Fa=new Uint8Array([0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63]),Ia=4017,Ta=799,Oa=3406,Da=2276,Ma=1567,Ra=3784,Ba=5793,Na=2896;function buildHuffmanTable(e,t){let a,r,i=0,n=16;for(;n>0&&!e[n-1];)n--;const s=[{children:[],index:0}];let o,c=s[0];for(a=0;a0;)c=s.pop();c.index++;s.push(c);for(;s.length<=a;){s.push(o={children:[],index:0});c.children[c.index]=o.children;c=o}i++}if(a+10){g--;return f>>g&1}f=e[t++];if(255===f){const r=e[t++];if(r){if(220===r&&l){const r=readUint16(e,t+=2);t+=2;if(r>0&&r!==a.scanLines)throw new DNLMarkerError("Found DNL marker (0xFFDC) while parsing scan data",r)}else if(217===r){if(l){const e=y*(8===a.precision?8:0);if(e>0&&Math.round(a.scanLines/e)>=5)throw new DNLMarkerError("Found EOI marker (0xFFD9) while parsing scan data, possibly caused by incorrect `scanLines` parameter",e)}throw new EOIMarkerError("Found EOI marker (0xFFD9) while parsing scan data")}throw new JpegError(`unexpected marker ${(f<<8|r).toString(16)}`)}}g=7;return f>>>7}function decodeHuffman(e){let t=e;for(;;){t=t[readBit()];switch(typeof t){case"number":return t;case"object":continue}throw new JpegError("invalid huffman sequence")}}function receive(e){let t=0;for(;e>0;){t=t<<1|readBit();e--}return t}function receiveAndExtend(e){if(1===e)return 1===readBit()?1:-1;const t=receive(e);return t>=1<0){p--;return}let a=n;const r=s;for(;a<=r;){const r=decodeHuffman(e.huffmanTableAC),i=15&r,n=r>>4;if(0===i){if(n<15){p=receive(n)+(1<>4;if(0===i)if(l<15){p=receive(l)+(1<>4;if(0===r){if(n<15)break;i+=16;continue}i+=n;const s=Fa[i];e.blockData[t+s]=receiveAndExtend(r);i++}};let T,O=0;const D=1===w?r[0].blocksPerLine*r[0].blocksPerColumn:h*a.mcusPerColumn;let M,R;for(;O<=D;){const a=i?Math.min(D-O,i):D;if(a>0){for(x=0;x0?"unexpected":"excessive"} MCU data, current marker is: ${T.invalid}`);t=T.offset}if(!(T.marker>=65488&&T.marker<=65495))break;t+=2}return t-d}function quantizeAndInverse(e,t,a){const r=e.quantizationTable,i=e.blockData;let n,s,o,c,l,h,u,d,f,g,p,m,b,y,w,S,x;if(!r)throw new JpegError("missing required Quantization Table.");for(let e=0;e<64;e+=8){f=i[t+e];g=i[t+e+1];p=i[t+e+2];m=i[t+e+3];b=i[t+e+4];y=i[t+e+5];w=i[t+e+6];S=i[t+e+7];f*=r[e];if(0!==(g|p|m|b|y|w|S)){g*=r[e+1];p*=r[e+2];m*=r[e+3];b*=r[e+4];y*=r[e+5];w*=r[e+6];S*=r[e+7];n=Ba*f+128>>8;s=Ba*b+128>>8;o=p;c=w;l=Na*(g-S)+128>>8;d=Na*(g+S)+128>>8;h=m<<4;u=y<<4;n=n+s+1>>1;s=n-s;x=o*Ra+c*Ma+128>>8;o=o*Ma-c*Ra+128>>8;c=x;l=l+u+1>>1;u=l-u;d=d+h+1>>1;h=d-h;n=n+c+1>>1;c=n-c;s=s+o+1>>1;o=s-o;x=l*Da+d*Oa+2048>>12;l=l*Oa-d*Da+2048>>12;d=x;x=h*Ta+u*Ia+2048>>12;h=h*Ia-u*Ta+2048>>12;u=x;a[e]=n+d;a[e+7]=n-d;a[e+1]=s+u;a[e+6]=s-u;a[e+2]=o+h;a[e+5]=o-h;a[e+3]=c+l;a[e+4]=c-l}else{x=Ba*f+512>>10;a[e]=x;a[e+1]=x;a[e+2]=x;a[e+3]=x;a[e+4]=x;a[e+5]=x;a[e+6]=x;a[e+7]=x}}for(let e=0;e<8;++e){f=a[e];g=a[e+8];p=a[e+16];m=a[e+24];b=a[e+32];y=a[e+40];w=a[e+48];S=a[e+56];if(0!==(g|p|m|b|y|w|S)){n=Ba*f+2048>>12;s=Ba*b+2048>>12;o=p;c=w;l=Na*(g-S)+2048>>12;d=Na*(g+S)+2048>>12;h=m;u=y;n=4112+(n+s+1>>1);s=n-s;x=o*Ra+c*Ma+2048>>12;o=o*Ma-c*Ra+2048>>12;c=x;l=l+u+1>>1;u=l-u;d=d+h+1>>1;h=d-h;n=n+c+1>>1;c=n-c;s=s+o+1>>1;o=s-o;x=l*Da+d*Oa+2048>>12;l=l*Oa-d*Da+2048>>12;d=x;x=h*Ta+u*Ia+2048>>12;h=h*Ia-u*Ta+2048>>12;u=x;f=n+d;S=n-d;g=s+u;w=s-u;p=o+h;y=o-h;m=c+l;b=c-l;f<16?f=0:f>=4080?f=255:f>>=4;g<16?g=0:g>=4080?g=255:g>>=4;p<16?p=0:p>=4080?p=255:p>>=4;m<16?m=0:m>=4080?m=255:m>>=4;b<16?b=0:b>=4080?b=255:b>>=4;y<16?y=0:y>=4080?y=255:y>>=4;w<16?w=0:w>=4080?w=255:w>>=4;S<16?S=0:S>=4080?S=255:S>>=4;i[t+e]=f;i[t+e+8]=g;i[t+e+16]=p;i[t+e+24]=m;i[t+e+32]=b;i[t+e+40]=y;i[t+e+48]=w;i[t+e+56]=S}else{x=Ba*f+8192>>14;x=x<-2040?0:x>=2024?255:x+2056>>4;i[t+e]=x;i[t+e+8]=x;i[t+e+16]=x;i[t+e+24]=x;i[t+e+32]=x;i[t+e+40]=x;i[t+e+48]=x;i[t+e+56]=x}}}function buildComponentData(e,t){const a=t.blocksPerLine,r=t.blocksPerColumn,i=new Int16Array(64);for(let e=0;e=r)return null;const n=readUint16(e,t);if(n>=65472&&n<=65534)return{invalid:null,marker:n,offset:t};let s=readUint16(e,i);for(;!(s>=65472&&s<=65534);){if(++i>=r)return null;s=readUint16(e,i)}return{invalid:n.toString(16),marker:s,offset:i}}function prepareComponents(e){const t=Math.ceil(e.samplesPerLine/8/e.maxH),a=Math.ceil(e.scanLines/8/e.maxV);for(const r of e.components){const i=Math.ceil(Math.ceil(e.samplesPerLine/8)*r.h/e.maxH),n=Math.ceil(Math.ceil(e.scanLines/8)*r.v/e.maxV),s=t*r.h,o=64*(a*r.v)*(s+1);r.blockData=new Int16Array(o);r.blocksPerLine=i;r.blocksPerColumn=n}e.mcusPerLine=t;e.mcusPerColumn=a}function readDataBlock(e,t){const a=readUint16(e,t);let r=(t+=2)+a-2;const i=findNextFileMarker(e,r,t);if(i?.invalid){warn("readDataBlock - incorrect length, current marker is: "+i.invalid);r=i.offset}const n=e.subarray(t,r);return{appData:n,oldOffset:t,newOffset:t+n.length}}function skipData(e,t){const a=readUint16(e,t),r=(t+=2)+a-2,i=findNextFileMarker(e,r,t);return i?.invalid?i.offset:r}class JpegImage{constructor({decodeTransform:e=null,colorTransform:t=-1}={}){this._decodeTransform=e;this._colorTransform=t}static canUseImageDecoder(e,t=-1){let a=null,r=0,i=null,n=readUint16(e,r);r+=2;if(65496!==n)throw new JpegError("SOI not found");n=readUint16(e,r);r+=2;e:for(;65497!==n;){switch(n){case 65505:const{appData:t,oldOffset:s,newOffset:o}=readDataBlock(e,r);r=o;if(69===t[0]&&120===t[1]&&105===t[2]&&102===t[3]&&0===t[4]&&0===t[5]){if(a)throw new JpegError("Duplicate EXIF-blocks found.");a={exifStart:s+6,exifEnd:o}}n=readUint16(e,r);r+=2;continue;case 65472:case 65473:case 65474:i=e[r+7];break e;case 65535:255!==e[r]&&r--}r=skipData(e,r);n=readUint16(e,r);r+=2}return 4===i||3===i&&0===t?null:a||{}}parse(e,{dnlScanLines:t=null}={}){let a,r,i=0,n=null,s=null,o=0;const c=[],l=[],h=[];let u=readUint16(e,i);i+=2;if(65496!==u)throw new JpegError("SOI not found");u=readUint16(e,i);i+=2;e:for(;65497!==u;){let d,f,g;switch(u){case 65504:case 65505:case 65506:case 65507:case 65508:case 65509:case 65510:case 65511:case 65512:case 65513:case 65514:case 65515:case 65516:case 65517:case 65518:case 65519:case 65534:const{appData:p,newOffset:m}=readDataBlock(e,i);i=m;65504===u&&74===p[0]&&70===p[1]&&73===p[2]&&70===p[3]&&0===p[4]&&(n={version:{major:p[5],minor:p[6]},densityUnits:p[7],xDensity:p[8]<<8|p[9],yDensity:p[10]<<8|p[11],thumbWidth:p[12],thumbHeight:p[13],thumbData:p.subarray(14,14+3*p[12]*p[13])});65518===u&&65===p[0]&&100===p[1]&&111===p[2]&&98===p[3]&&101===p[4]&&(s={version:p[5]<<8|p[6],flags0:p[7]<<8|p[8],flags1:p[9]<<8|p[10],transformCode:p[11]});break;case 65499:const b=readUint16(e,i);i+=2;const y=b+i-2;let w;for(;i>4){if(t>>4!=1)throw new JpegError("DQT - invalid table spec");for(f=0;f<64;f++){w=Fa[f];a[w]=readUint16(e,i);i+=2}}else for(f=0;f<64;f++){w=Fa[f];a[w]=e[i++]}c[15&t]=a}break;case 65472:case 65473:case 65474:if(a)throw new JpegError("Only single frame JPEGs supported");i+=2;a={};a.extended=65473===u;a.progressive=65474===u;a.precision=e[i++];const S=readUint16(e,i);i+=2;a.scanLines=t||S;a.samplesPerLine=readUint16(e,i);i+=2;a.components=[];a.componentIds={};const x=e[i++];let k=0,C=0;for(d=0;d>4,n=15&e[i+1];k>4?l:h)[15&t]=buildHuffmanTable(a,n)}break;case 65501:i+=2;r=readUint16(e,i);i+=2;break;case 65498:const F=1===++o&&!t;i+=2;const T=e[i++],O=[];for(d=0;d>4];n.huffmanTableAC=l[15&s];O.push(n)}const D=e[i++],M=e[i++],R=e[i++];try{i+=decodeScan(e,i,a,O,r,D,M,R>>4,15&R,F)}catch(t){if(t instanceof DNLMarkerError){warn(`${t.message} -- attempting to re-parse the JPEG image.`);return this.parse(e,{dnlScanLines:t.scanLines})}if(t instanceof EOIMarkerError){warn(`${t.message} -- ignoring the rest of the image data.`);break e}throw t}break;case 65500:i+=4;break;case 65535:255!==e[i]&&i--;break;default:const N=findNextFileMarker(e,i-2,i-3);if(N?.invalid){warn("JpegImage.parse - unexpected data, current marker is: "+N.invalid);i=N.offset;break}if(!N||i>=e.length-1){warn("JpegImage.parse - reached the end of the image data without finding an EOI marker (0xFFD9).");break e}throw new JpegError("JpegImage.parse - unknown marker: "+u.toString(16))}u=readUint16(e,i);i+=2}if(!a)throw new JpegError("JpegImage.parse - no frame data found.");this.width=a.samplesPerLine;this.height=a.scanLines;this.jfif=n;this.adobe=s;this.components=[];for(const e of a.components){const t=c[e.quantizationId];t&&(e.quantizationTable=t);this.components.push({index:e.index,output:buildComponentData(0,e),scaleX:e.h/a.maxH,scaleY:e.v/a.maxV,blocksPerLine:e.blocksPerLine,blocksPerColumn:e.blocksPerColumn})}this.numComponents=this.components.length}_getLinearizedBlockData(e,t,a=!1){const r=this.width/e,i=this.height/t;let n,s,o,c,l,h,u,d,f,g,p,m=0;const b=this.components.length,y=e*t*b,w=new Uint8ClampedArray(y),S=new Uint32Array(e),x=4294967288;let k;for(u=0;u>8)+C[f+1];return w}get _isColorConversionNeeded(){return this.adobe?!!this.adobe.transformCode:3===this.numComponents?0!==this._colorTransform&&(82!==this.components[0].index||71!==this.components[1].index||66!==this.components[2].index):1===this._colorTransform}_convertYccToRgb(e){let t,a,r;for(let i=0,n=e.length;i4)throw new JpegError("Unsupported color mode");const n=this._getLinearizedBlockData(e,t,i);if(1===this.numComponents&&(a||r)){const e=n.length*(a?4:3),t=new Uint8ClampedArray(e);let r=0;if(a)!function grayToRGBA(e,t){if(FeatureTest.isLittleEndian)for(let a=0,r=e.length;a0&&(e=e.subarray(t));break}return e}decodeImage(e){if(this.eof)return this.buffer;e=this.#U(e||this.bytes);const t=new JpegImage(this.jpegOptions);t.parse(e);const a=t.getData({width:this.drawWidth,height:this.drawHeight,forceRGBA:this.forceRGBA,forceRGB:this.forceRGB,isSourcePDF:!0});this.buffer=a;this.bufferLength=a.length;this.eof=!0;return this.buffer}get canAsyncDecodeImageFromBuffer(){return this.stream.isAsync}async getTransferableImage(){if(!await JpegStream.canUseImageDecoder)return null;const e=this.jpegOptions;if(e.decodeTransform)return null;let t;try{const a=this.canAsyncDecodeImageFromBuffer&&await this.stream.asyncGetBytes()||this.bytes;if(!a)return null;let r=this.#U(a);const i=JpegImage.canUseImageDecoder(r,e.colorTransform);if(!i)return null;if(i.exifStart){r=r.slice();r.fill(0,i.exifStart,i.exifEnd)}t=new ImageDecoder({data:r,type:"image/jpeg",preferAnimation:!1});return(await t.decode()).image}catch(e){warn(`getTransferableImage - failed: "${e}".`);return null}finally{t?.close()}}get isImageStream(){return!0}}const Pa=async function OpenJPEG(e={}){var t=e,a="./this.program",quit_=(e,t)=>{throw t},r=import.meta.url;try{new URL(".",r).href}catch{}0;var i,n,s,o,c,l,h,u,d=console.log.bind(console),f=console.error.bind(console),g=!1,p=!1;function updateMemoryViews(){var e=o.buffer;c=new Int8Array(e);new Int16Array(e);l=new Uint8Array(e);new Uint16Array(e);h=new Int32Array(e);u=new Uint32Array(e);new Float32Array(e);new Float64Array(e);new BigInt64Array(e);new BigUint64Array(e)}class ExitStatus{name="ExitStatus";constructor(e){this.message=`Program terminated with exit(${e})`;this.status=e}}var m,callRuntimeCallbacks=e=>{for(;e.length>0;)e.shift()(t)},b=[],addOnPostRun=e=>b.push(e),y=[],addOnPreRun=e=>y.push(e),w=!0,S=0,x={},handleException=e=>{if(e instanceof ExitStatus||"unwind"==e)return i;quit_(0,e)},keepRuntimeAlive=()=>w||S>0,_proc_exit=e=>{i=e;if(!keepRuntimeAlive()){t.onExit?.(e);g=!0}quit_(0,new ExitStatus(e))},_exit=(e,t)=>{i=e;_proc_exit(e)},callUserCallback=e=>{if(!g)try{e();(()=>{if(!keepRuntimeAlive())try{_exit(i)}catch(e){handleException(e)}})()}catch(e){handleException(e)}},alignMemory=(e,t)=>Math.ceil(e/t)*t,growMemory=e=>{var t=(e-o.buffer.byteLength+65535)/65536|0;try{o.grow(t);updateMemoryViews();return 1}catch(e){}},k={},getEnvStrings=()=>{if(!getEnvStrings.strings){var e={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.language||"C").replace("-","_")+".UTF-8",_:a||"./this.program"};for(var t in k)void 0===k[t]?delete e[t]:e[t]=k[t];var r=[];for(var t in e)r.push(`${t}=${e[t]}`);getEnvStrings.strings=r}return getEnvStrings.strings},stringToUTF8=(e,t,a)=>((e,t,a,r)=>{if(!(r>0))return 0;for(var i=a,n=a+r-1,s=0;s=n)break;t[a++]=o}else if(o<=2047){if(a+1>=n)break;t[a++]=192|o>>6;t[a++]=128|63&o}else if(o<=65535){if(a+2>=n)break;t[a++]=224|o>>12;t[a++]=128|o>>6&63;t[a++]=128|63&o}else{if(a+3>=n)break;t[a++]=240|o>>18;t[a++]=128|o>>12&63;t[a++]=128|o>>6&63;t[a++]=128|63&o;s++}}t[a]=0;return a-i})(e,l,t,a),lengthBytesUTF8=e=>{for(var t=0,a=0;a=55296&&r<=57343){t+=4;++a}else t+=3}return t},C=[null,[],[]],v="undefined"!=typeof TextDecoder?new TextDecoder:void 0,UTF8ArrayToString=(e,t=0,a,r)=>{var i=((e,t,a,r)=>{var i=t+a;if(r)return i;for(;e[t]&&!(t>=i);)++t;return t})(e,t,a,r);if(i-t>16&&e.buffer&&v)return v.decode(e.subarray(t,i));for(var n="";t>10,56320|1023&l)}}else n+=String.fromCharCode((31&s)<<6|o)}else n+=String.fromCharCode(s)}return n},printChar=(e,t)=>{var a=C[e];if(0===t||10===t){(1===e?d:f)(UTF8ArrayToString(a));a.length=0}else a.push(t)},UTF8ToString=(e,t,a)=>e?UTF8ArrayToString(l,e,t,a):"";t.noExitRuntime&&(w=t.noExitRuntime);t.print&&(d=t.print);t.printErr&&(f=t.printErr);t.wasmBinary&&t.wasmBinary;t.arguments&&t.arguments;t.thisProgram&&(a=t.thisProgram);if(t.preInit){"function"==typeof t.preInit&&(t.preInit=[t.preInit]);for(;t.preInit.length>0;)t.preInit.shift()()}t.writeArrayToMemory=(e,t)=>{c.set(e,t)};var F,T={k:()=>function abort(e){t.onAbort?.(e);f(e="Aborted("+e+")");g=!0;e+=". Build with -sASSERTIONS for more info.";var a=new WebAssembly.RuntimeError(e);s?.(a);throw a}(""),j:()=>{w=!1;S=0},l:(e,t)=>{if(x[e]){clearTimeout(x[e].id);delete x[e]}if(!t)return 0;var a=setTimeout(()=>{delete x[e];callUserCallback(()=>m(e,performance.now()))},t);x[e]={id:a,timeout_ms:t};return 0},f:function _copy_pixels_1(e,a){e>>=2;const r=t.imageData=new Uint8ClampedArray(a),i=h.subarray(e,e+a);r.set(i)},e:function _copy_pixels_3(e,a,r,i){e>>=2;a>>=2;r>>=2;const n=t.imageData=new Uint8ClampedArray(3*i),s=h.subarray(e,e+i),o=h.subarray(a,a+i),c=h.subarray(r,r+i);for(let e=0;e>=2;a>>=2;r>>=2;i>>=2;const s=t.imageData=new Uint8ClampedArray(4*n),o=h.subarray(e,e+n),c=h.subarray(a,a+n),l=h.subarray(r,r+n),u=h.subarray(i,i+n);for(let e=0;e{var t=l.length,a=2147483648;if((e>>>=0)>a)return!1;for(var r=1;r<=4;r*=2){var i=t*(1+.2/r);i=Math.min(i,e+100663296);var n=Math.min(a,alignMemory(Math.max(e,i),65536));if(growMemory(n))return!0}return!1},o:(e,t)=>{var a=0,r=0;for(var i of getEnvStrings()){var n=t+a;u[e+r>>2]=n;a+=stringToUTF8(i,n,1/0)+1;r+=4}return 0},p:(e,t)=>{var a=getEnvStrings();u[e>>2]=a.length;var r=0;for(var i of a)r+=lengthBytesUTF8(i)+1;u[t>>2]=r;return 0},n:function _fd_seek(e,t,a,r){t=(i=t)<-9007199254740992||i>9007199254740992?NaN:Number(i);var i;return 70},b:(e,t,a,r)=>{for(var i=0,n=0;n>2],o=u[t+4>>2];t+=8;for(var c=0;c>2]=i;return 0},q:function _gray_to_rgba(e,a){e>>=2;const r=t.imageData=new Uint8ClampedArray(4*a),i=h.subarray(e,e+a);for(let e=0;e>=2;a>>=2;const i=t.imageData=new Uint8ClampedArray(4*r),n=h.subarray(e,e+r),s=h.subarray(a,a+r);for(let e=0;e>=2;a>>=2;r>>=2;const n=t.imageData=new Uint8ClampedArray(4*i),s=h.subarray(e,e+i),o=h.subarray(a,a+i),c=h.subarray(r,r+i);for(let e=0;e{t.instantiateWasm(e,(e,t)=>{a(receiveInstance(e))})})}();!function run(){!function preRun(){if(t.preRun){"function"==typeof t.preRun&&(t.preRun=[t.preRun]);for(;t.preRun.length;)addOnPreRun(t.preRun.shift())}callRuntimeCallbacks(y)}();function doRun(){t.calledRun=!0;if(!g){!function initRuntime(){p=!0;F.s()}();n?.(t);t.onRuntimeInitialized?.();!function postRun(){if(t.postRun){"function"==typeof t.postRun&&(t.postRun=[t.postRun]);for(;t.postRun.length;)addOnPostRun(t.postRun.shift())}callRuntimeCallbacks(b)}()}}if(t.setStatus){t.setStatus("Running...");setTimeout(()=>{setTimeout(()=>t.setStatus(""),1);doRun()},1)}else doRun()}();return p?t:new Promise((e,t)=>{n=e;s=t})};class JpxError extends ea{constructor(e){super(e,"JpxError")}}class JpxImage{static#R=null;static#B=null;static#N=null;static#v=!0;static#P=!0;static#F=null;static setOptions({handler:e,useWasm:t,useWorkerFetch:a,wasmUrl:r}){this.#v=t;this.#P=a;this.#F=r;a||(this.#B=e)}static async#j(e){const t=`${this.#F}openjpeg_nowasm_fallback.js`;let a=null;try{a=(await import( +/*webpackIgnore: true*/ +/*@vite-ignore*/ +t)).default()}catch(e){warn(`JpxImage#getJsModule: ${e}`)}e(a)}static async#E(e,t,a){const r="openjpeg.wasm";try{this.#R||(this.#P?this.#R=await fetchBinaryData(`${this.#F}${r}`):this.#R=await this.#B.sendWithPromise("FetchBinaryData",{type:"wasmFactory",filename:r}));return a((await WebAssembly.instantiate(this.#R,t)).instance)}catch(t){warn(`JpxImage#instantiateWasm: ${t}`);this.#j(e);return null}finally{this.#B=null}}static async decode(e,{numComponents:t=4,isIndexedColormap:a=!1,smaskInData:r=!1,reducePower:i=0}={}){if(!this.#N){const{promise:e,resolve:t}=Promise.withResolvers(),a=[e];this.#v?a.push(Pa({warn,instantiateWasm:this.#E.bind(this,t)})):this.#j(t);this.#N=Promise.race(a)}const n=await this.#N;if(!n)throw new JpxError("OpenJPEG failed to initialize");let s;try{const o=e.length;s=n._malloc(o);n.writeArrayToMemory(e,s);if(n._jp2_decode(s,o,t>0?t:0,!!a,!!r,i)){const{errorMessages:e}=n;if(e){delete n.errorMessages;throw new JpxError(e)}throw new JpxError("Unknown error")}const{imageData:c}=n;n.imageData=null;return c}finally{s&&n._free(s)}}static cleanup(){this.#N=null}static parseImageProperties(e){let t=e.getByte();for(;t>=0;){const a=t;t=e.getByte();if(65361===(a<<8|t)){e.skip(4);const t=e.getInt32()>>>0,a=e.getInt32()>>>0,r=e.getInt32()>>>0,i=e.getInt32()>>>0;e.skip(16);return{width:t-r,height:a-i,bitsPerComponent:8,componentsCount:e.getUint16()}}}throw new JpxError("No size marker found in JPX stream")}}function addState(e,t,a,r,i){let n=e;for(let e=0,a=t.length-1;e1e3){l=Math.max(l,d);f+=u+2;d=0;u=0}h.push({transform:t,x:d,y:f,w:a.width,h:a.height});d+=a.width+2;u=Math.max(u,a.height)}const g=Math.max(l,d)+1,p=f+u+1,m=new Uint8Array(g*p*4),b=g<<2;for(let e=0;e=0;){t[n-4]=t[n];t[n-3]=t[n+1];t[n-2]=t[n+2];t[n-1]=t[n+3];t[n+a]=t[n+a-4];t[n+a+1]=t[n+a-3];t[n+a+2]=t[n+a-2];t[n+a+3]=t[n+a-1];n-=b}}const y={width:g,height:p};if(e.isOffscreenCanvasSupported){const e=new OffscreenCanvas(g,p);e.getContext("2d").putImageData(new ImageData(new Uint8ClampedArray(m.buffer),g,p),0,0);y.bitmap=e.transferToImageBitmap();y.data=null}else{y.kind=O;y.data=m}a.splice(n,4*c,_t);r.splice(n,4*c,[y,h]);return n+1});addState(Ea,[ye,Se,Nt,we],null,function iterateImageMaskGroup(e,t){const a=e.fnArray,r=(t-(e.iCurr-3))%4;switch(r){case 0:return a[t]===ye;case 1:return a[t]===Se;case 2:return a[t]===Nt;case 3:return a[t]===we}throw new Error(`iterateImageMaskGroup - invalid pos: ${r}`)},function foundImageMaskGroup(e,t){const a=e.fnArray,r=e.argsArray,i=e.iCurr,n=i-3,s=i-2,o=i-1;let c=Math.floor((t-n)/4);if(c<10)return t-(t-n)%4;let l,h,u=!1;const d=r[o][0],f=r[s][0],g=r[s][1],p=r[s][2],m=r[s][3];if(g===p){u=!0;l=s+4;let e=o+4;for(let t=1;t=4&&a[n-4]===a[s]&&a[n-3]===a[o]&&a[n-2]===a[c]&&a[n-1]===a[l]&&r[n-4][0]===h&&r[n-4][1]===u){d++;f-=5}let g=f+4;for(let e=1;e{const t=e.argsArray,a=t[e.iCurr-1][0];if(a!==Te&&a!==Oe&&a!==Re&&a!==Be&&a!==Ne&&a!==Pe)return!0;const r=t[e.iCurr-2];return 1===r[0]&&0===r[1]&&0===r[2]&&1===r[3]},()=>!1,(e,t)=>{const{fnArray:a,argsArray:r}=e,i=e.iCurr,n=i-3,s=i-2,o=r[i-1],c=r[s],[,[l],h]=o;if(h){Util.scaleMinMax(c,h);for(let e=0,t=l.length;e=a)break}r=(r||Ea)[e[t]];if(r&&!Array.isArray(r)){n.iCurr=t;t++;if(!r.checkFn||(0,r.checkFn)(n)){i=r;r=null}else r=null}else t++}this.state=r;this.match=i;this.lastProcessed=t}flush(){for(;this.match;){const e=this.queue.fnArray.length;this.lastProcessed=(0,this.match.processFn)(this.context,e);this.match=null;this.state=null;this._optimize()}}reset(){this.state=null;this.match=null;this.lastProcessed=0}}class OperatorList{static CHUNK_SIZE=1e3;static CHUNK_SIZE_ABOUT=this.CHUNK_SIZE-5;static isOffscreenCanvasSupported=!1;constructor(e=0,t){this._streamSink=t;this.fnArray=[];this.argsArray=[];this.optimizer=!t||e&d?new NullOptimizer(this):new QueueOptimizer(this);this.dependencies=new Set;this._totalLength=0;this.weight=0;this._resolved=t?null:Promise.resolve()}static setOptions({isOffscreenCanvasSupported:e}){this.isOffscreenCanvasSupported=e}get length(){return this.argsArray.length}get ready(){return this._resolved||this._streamSink.ready}get totalLength(){return this._totalLength+this.length}addOp(e,t){this.optimizer.push(e,t);this.weight++;this._streamSink&&(this.weight>=OperatorList.CHUNK_SIZE||this.weight>=OperatorList.CHUNK_SIZE_ABOUT&&(e===we||e===je))&&this.flush()}addImageOps(e,t,a,r=!1){if(r){this.addOp(ye);this.addOp(be,[[["SMask",!1]]])}void 0!==a&&this.addOp(Ct,["OC",a]);this.addOp(e,t);void 0!==a&&this.addOp(vt,[]);r&&this.addOp(we)}addDependency(e){if(!this.dependencies.has(e)){this.dependencies.add(e);this.addOp(le,[e])}}addDependencies(e){for(const t of e)this.addDependency(t)}addOpList(e){if(e instanceof OperatorList){for(const t of e.dependencies)this.dependencies.add(t);for(let t=0,a=e.length;t>>0}function hexToStr(e,t){return 1===t?String.fromCharCode(e[0],e[1]):3===t?String.fromCharCode(e[0],e[1],e[2],e[3]):String.fromCharCode(...e.subarray(0,t+1))}function addHex(e,t,a){let r=0;for(let i=a;i>=0;i--){r+=e[i]+t[i];e[i]=255&r;r>>=8}}function incHex(e,t){let a=1;for(let r=t;r>=0&&a>0;r--){a+=e[r];e[r]=255&a;a>>=8}}const La=16;class BinaryCMapStream{constructor(e){this.buffer=e;this.pos=0;this.end=e.length;this.tmpBuf=new Uint8Array(19)}readByte(){return this.pos>=this.end?-1:this.buffer[this.pos++]}readNumber(){let e,t=0;do{const a=this.readByte();if(a<0)throw new FormatError("unexpected EOF in bcmap");e=!(128&a);t=t<<7|127&a}while(!e);return t}readSigned(){const e=this.readNumber();return 1&e?~(e>>>1):e>>>1}readHex(e,t){e.set(this.buffer.subarray(this.pos,this.pos+t+1));this.pos+=t+1}readHexNumber(e,t){let a;const r=this.tmpBuf;let i=0;do{const e=this.readByte();if(e<0)throw new FormatError("unexpected EOF in bcmap");a=!(128&e);r[i++]=127&e}while(!a);let n=t,s=0,o=0;for(;n>=0;){for(;o<8&&r.length>0;){s|=r[--i]<>=8;o-=8}}readHexSigned(e,t){this.readHexNumber(e,t);const a=1&e[t]?255:0;let r=0;for(let i=0;i<=t;i++){r=(1&r)<<8|e[i];e[i]=r>>1^a}}readString(){const e=this.readNumber(),t=new Array(e);for(let a=0;a=0;){const e=d>>5;if(7===e){switch(31&d){case 0:r.readString();break;case 1:n=r.readString()}continue}const a=!!(16&d),i=15&d;if(i+1>La)throw new Error("BinaryCMapReader.process: Invalid dataSize.");const f=1,g=r.readNumber();switch(e){case 0:r.readHex(s,i);r.readHexNumber(o,i);addHex(o,s,i);t.addCodespaceRange(i+1,hexToInt(s,i),hexToInt(o,i));for(let e=1;e=0;--i){r[a+i]=255&s;s>>=8}}}}class AsciiHexStream extends DecodeStream{constructor(e,t){t&&(t*=.5);super(t);this.stream=e;this.dict=e.dict;this.firstDigit=-1}readBlock(){const e=this.stream.getBytes(8e3);if(!e.length){this.eof=!0;return}const t=e.length+1>>1,a=this.ensureBuffer(this.bufferLength+t);let r=this.bufferLength,i=this.firstDigit;for(const t of e){let e;if(t>=48&&t<=57)e=15&t;else{if(!(t>=65&&t<=70||t>=97&&t<=102)){if(62===t){this.eof=!0;break}continue}e=9+(15&t)}if(i<0)i=e;else{a[r++]=i<<4|e;i=-1}}if(i>=0&&this.eof){a[r++]=i<<4;i=-1}this.firstDigit=i;this.bufferLength=r}}const _a=-1,Ua=[[-1,-1],[-1,-1],[7,8],[7,7],[6,6],[6,6],[6,5],[6,5],[4,0],[4,0],[4,0],[4,0],[4,0],[4,0],[4,0],[4,0],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2]],ja=[[-1,-1],[12,-2],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[11,1792],[11,1792],[12,1984],[12,2048],[12,2112],[12,2176],[12,2240],[12,2304],[11,1856],[11,1856],[11,1920],[11,1920],[12,2368],[12,2432],[12,2496],[12,2560]],Xa=[[-1,-1],[-1,-1],[-1,-1],[-1,-1],[8,29],[8,29],[8,30],[8,30],[8,45],[8,45],[8,46],[8,46],[7,22],[7,22],[7,22],[7,22],[7,23],[7,23],[7,23],[7,23],[8,47],[8,47],[8,48],[8,48],[6,13],[6,13],[6,13],[6,13],[6,13],[6,13],[6,13],[6,13],[7,20],[7,20],[7,20],[7,20],[8,33],[8,33],[8,34],[8,34],[8,35],[8,35],[8,36],[8,36],[8,37],[8,37],[8,38],[8,38],[7,19],[7,19],[7,19],[7,19],[8,31],[8,31],[8,32],[8,32],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,12],[6,12],[6,12],[6,12],[6,12],[6,12],[6,12],[6,12],[8,53],[8,53],[8,54],[8,54],[7,26],[7,26],[7,26],[7,26],[8,39],[8,39],[8,40],[8,40],[8,41],[8,41],[8,42],[8,42],[8,43],[8,43],[8,44],[8,44],[7,21],[7,21],[7,21],[7,21],[7,28],[7,28],[7,28],[7,28],[8,61],[8,61],[8,62],[8,62],[8,63],[8,63],[8,0],[8,0],[8,320],[8,320],[8,384],[8,384],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[7,27],[7,27],[7,27],[7,27],[8,59],[8,59],[8,60],[8,60],[9,1472],[9,1536],[9,1600],[9,1728],[7,18],[7,18],[7,18],[7,18],[7,24],[7,24],[7,24],[7,24],[8,49],[8,49],[8,50],[8,50],[8,51],[8,51],[8,52],[8,52],[7,25],[7,25],[7,25],[7,25],[8,55],[8,55],[8,56],[8,56],[8,57],[8,57],[8,58],[8,58],[6,192],[6,192],[6,192],[6,192],[6,192],[6,192],[6,192],[6,192],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[8,448],[8,448],[8,512],[8,512],[9,704],[9,768],[8,640],[8,640],[8,576],[8,576],[9,832],[9,896],[9,960],[9,1024],[9,1088],[9,1152],[9,1216],[9,1280],[9,1344],[9,1408],[7,256],[7,256],[7,256],[7,256],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[6,16],[6,16],[6,16],[6,16],[6,16],[6,16],[6,16],[6,16],[6,17],[6,17],[6,17],[6,17],[6,17],[6,17],[6,17],[6,17],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[6,14],[6,14],[6,14],[6,14],[6,14],[6,14],[6,14],[6,14],[6,15],[6,15],[6,15],[6,15],[6,15],[6,15],[6,15],[6,15],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7]],qa=[[-1,-1],[-1,-1],[12,-2],[12,-2],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[11,1792],[11,1792],[11,1792],[11,1792],[12,1984],[12,1984],[12,2048],[12,2048],[12,2112],[12,2112],[12,2176],[12,2176],[12,2240],[12,2240],[12,2304],[12,2304],[11,1856],[11,1856],[11,1856],[11,1856],[11,1920],[11,1920],[11,1920],[11,1920],[12,2368],[12,2368],[12,2432],[12,2432],[12,2496],[12,2496],[12,2560],[12,2560],[10,18],[10,18],[10,18],[10,18],[10,18],[10,18],[10,18],[10,18],[12,52],[12,52],[13,640],[13,704],[13,768],[13,832],[12,55],[12,55],[12,56],[12,56],[13,1280],[13,1344],[13,1408],[13,1472],[12,59],[12,59],[12,60],[12,60],[13,1536],[13,1600],[11,24],[11,24],[11,24],[11,24],[11,25],[11,25],[11,25],[11,25],[13,1664],[13,1728],[12,320],[12,320],[12,384],[12,384],[12,448],[12,448],[13,512],[13,576],[12,53],[12,53],[12,54],[12,54],[13,896],[13,960],[13,1024],[13,1088],[13,1152],[13,1216],[10,64],[10,64],[10,64],[10,64],[10,64],[10,64],[10,64],[10,64]],Ha=[[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[11,23],[11,23],[12,50],[12,51],[12,44],[12,45],[12,46],[12,47],[12,57],[12,58],[12,61],[12,256],[10,16],[10,16],[10,16],[10,16],[10,17],[10,17],[10,17],[10,17],[12,48],[12,49],[12,62],[12,63],[12,30],[12,31],[12,32],[12,33],[12,40],[12,41],[11,22],[11,22],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[9,15],[9,15],[9,15],[9,15],[9,15],[9,15],[9,15],[9,15],[12,128],[12,192],[12,26],[12,27],[12,28],[12,29],[11,19],[11,19],[11,20],[11,20],[12,34],[12,35],[12,36],[12,37],[12,38],[12,39],[11,21],[11,21],[12,42],[12,43],[10,0],[10,0],[10,0],[10,0],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12]],Wa=[[-1,-1],[-1,-1],[-1,-1],[-1,-1],[6,9],[6,8],[5,7],[5,7],[4,6],[4,6],[4,6],[4,6],[4,5],[4,5],[4,5],[4,5],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2]];class CCITTFaxDecoder{constructor(e,t={}){if("function"!=typeof e?.next)throw new Error('CCITTFaxDecoder - invalid "source" parameter.');this.source=e;this.eof=!1;this.encoding=t.K||0;this.eoline=t.EndOfLine||!1;this.byteAlign=t.EncodedByteAlign||!1;this.columns=t.Columns||1728;this.rows=t.Rows||0;this.eoblock=t.EndOfBlock??!0;this.black=t.BlackIs1||!1;this.codingLine=new Uint32Array(this.columns+1);this.refLine=new Uint32Array(this.columns+2);this.codingLine[0]=this.columns;this.codingPos=0;this.row=0;this.nextLine2D=this.encoding<0;this.inputBits=0;this.inputBuf=0;this.outputBits=0;this.rowsDone=!1;let a;for(;0===(a=this._lookBits(12));)this._eatBits(1);1===a&&this._eatBits(12);if(this.encoding>0){this.nextLine2D=!this._lookBits(1);this._eatBits(1)}}readNextChar(){if(this.eof)return-1;const e=this.refLine,t=this.codingLine,a=this.columns;let r,i,n,s,o;if(0===this.outputBits){this.rowsDone&&(this.eof=!0);if(this.eof)return-1;this.err=!1;let n,o,c;if(this.nextLine2D){for(s=0;t[s]=64);do{o+=c=this._getWhiteCode()}while(c>=64)}else{do{n+=c=this._getWhiteCode()}while(c>=64);do{o+=c=this._getBlackCode()}while(c>=64)}this._addPixels(t[this.codingPos]+n,i);t[this.codingPos]0?--r:++r;for(;e[r]<=t[this.codingPos]&&e[r]0?--r:++r;for(;e[r]<=t[this.codingPos]&&e[r]0?--r:++r;for(;e[r]<=t[this.codingPos]&&e[r]=64);else do{n+=c=this._getWhiteCode()}while(c>=64);this._addPixels(t[this.codingPos]+n,i);i^=1}}let l=!1;this.byteAlign&&(this.inputBits&=-8);if(this.eoblock||this.row!==this.rows-1){n=this._lookBits(12);if(this.eoline)for(;n!==_a&&1!==n;){this._eatBits(1);n=this._lookBits(12)}else for(;0===n;){this._eatBits(1);n=this._lookBits(12)}if(1===n){this._eatBits(12);l=!0}else n===_a&&(this.eof=!0)}else this.rowsDone=!0;if(!this.eof&&this.encoding>0&&!this.rowsDone){this.nextLine2D=!this._lookBits(1);this._eatBits(1)}if(this.eoblock&&l&&this.byteAlign){n=this._lookBits(12);if(1===n){this._eatBits(12);if(this.encoding>0){this._lookBits(1);this._eatBits(1)}if(this.encoding>=0)for(s=0;s<4;++s){n=this._lookBits(12);1!==n&&info("bad rtc code: "+n);this._eatBits(12);if(this.encoding>0){this._lookBits(1);this._eatBits(1)}}this.eof=!0}}else if(this.err&&this.eoline){for(;;){n=this._lookBits(13);if(n===_a){this.eof=!0;return-1}if(n>>1==1)break;this._eatBits(1)}this._eatBits(12);if(this.encoding>0){this._eatBits(1);this.nextLine2D=!(1&n)}}this.outputBits=t[0]>0?t[this.codingPos=0]:t[this.codingPos=1];this.row++}if(this.outputBits>=8){o=1&this.codingPos?0:255;this.outputBits-=8;if(0===this.outputBits&&t[this.codingPos]n){o<<=n;1&this.codingPos||(o|=255>>8-n);this.outputBits-=n;n=0}else{o<<=this.outputBits;1&this.codingPos||(o|=255>>8-this.outputBits);n-=this.outputBits;this.outputBits=0;if(t[this.codingPos]0){o<<=n;n=0}}}while(n)}this.black&&(o^=255);return o}_addPixels(e,t){const a=this.codingLine;let r=this.codingPos;if(e>a[r]){if(e>this.columns){info("row is wrong length");this.err=!0;e=this.columns}1&r^t&&++r;a[r]=e}this.codingPos=r}_addPixelsNeg(e,t){const a=this.codingLine;let r=this.codingPos;if(e>a[r]){if(e>this.columns){info("row is wrong length");this.err=!0;e=this.columns}1&r^t&&++r;a[r]=e}else if(e0&&e=i){const t=a[e-i];if(t[0]===r){this._eatBits(r);return[!0,t[1],!0]}}}return[!1,0,!1]}_getTwoDimCode(){let e,t=0;if(this.eoblock){t=this._lookBits(7);e=Ua[t];if(e?.[0]>0){this._eatBits(e[0]);return e[1]}}else{const e=this._findTableCode(1,7,Ua);if(e[0]&&e[2])return e[1]}info("Bad two dim code");return _a}_getWhiteCode(){let e,t=0;if(this.eoblock){t=this._lookBits(12);if(t===_a)return 1;e=t>>5?Xa[t>>3]:ja[t];if(e[0]>0){this._eatBits(e[0]);return e[1]}}else{let e=this._findTableCode(1,9,Xa);if(e[0])return e[1];e=this._findTableCode(11,12,ja);if(e[0])return e[1]}info("bad white code");this._eatBits(1);return 1}_getBlackCode(){let e,t;if(this.eoblock){e=this._lookBits(13);if(e===_a)return 1;t=e>>7?!(e>>9)&&e>>7?Ha[(e>>1)-64]:Wa[e>>7]:qa[e];if(t[0]>0){this._eatBits(t[0]);return t[1]}}else{let e=this._findTableCode(2,6,Wa);if(e[0])return e[1];e=this._findTableCode(7,12,Ha,64);if(e[0])return e[1];e=this._findTableCode(10,13,qa);if(e[0])return e[1]}info("bad black code");this._eatBits(1);return 1}_lookBits(e){let t;for(;this.inputBits>16-e;this.inputBuf=this.inputBuf<<8|t;this.inputBits+=8}return this.inputBuf>>this.inputBits-e&65535>>16-e}_eatBits(e){(this.inputBits-=e)<0&&(this.inputBits=0)}}class CCITTFaxStream extends DecodeStream{constructor(e,t,a){super(t);this.stream=e;this.dict=e.dict;a instanceof Dict||(a=Dict.empty);const r={next:()=>e.getByte()};this.ccittFaxDecoder=new CCITTFaxDecoder(r,{K:a.get("K"),EndOfLine:a.get("EndOfLine"),EncodedByteAlign:a.get("EncodedByteAlign"),Columns:a.get("Columns"),Rows:a.get("Rows"),EndOfBlock:a.get("EndOfBlock"),BlackIs1:a.get("BlackIs1")})}readBlock(){for(;!this.eof;){const e=this.ccittFaxDecoder.readNextChar();if(-1===e){this.eof=!0;return}this.ensureBuffer(this.bufferLength+1);this.buffer[this.bufferLength++]=e}}get isImageStream(){return!0}}const Ga=new Int32Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),$a=new Int32Array([3,4,5,6,7,8,9,10,65547,65549,65551,65553,131091,131095,131099,131103,196643,196651,196659,196667,262211,262227,262243,262259,327811,327843,327875,327907,258,258,258]),za=new Int32Array([1,2,3,4,65541,65543,131081,131085,196625,196633,262177,262193,327745,327777,393345,393409,459009,459137,524801,525057,590849,591361,657409,658433,724993,727041,794625,798721,868353,876545]),Va=[new Int32Array([459008,524368,524304,524568,459024,524400,524336,590016,459016,524384,524320,589984,524288,524416,524352,590048,459012,524376,524312,589968,459028,524408,524344,590032,459020,524392,524328,59e4,524296,524424,524360,590064,459010,524372,524308,524572,459026,524404,524340,590024,459018,524388,524324,589992,524292,524420,524356,590056,459014,524380,524316,589976,459030,524412,524348,590040,459022,524396,524332,590008,524300,524428,524364,590072,459009,524370,524306,524570,459025,524402,524338,590020,459017,524386,524322,589988,524290,524418,524354,590052,459013,524378,524314,589972,459029,524410,524346,590036,459021,524394,524330,590004,524298,524426,524362,590068,459011,524374,524310,524574,459027,524406,524342,590028,459019,524390,524326,589996,524294,524422,524358,590060,459015,524382,524318,589980,459031,524414,524350,590044,459023,524398,524334,590012,524302,524430,524366,590076,459008,524369,524305,524569,459024,524401,524337,590018,459016,524385,524321,589986,524289,524417,524353,590050,459012,524377,524313,589970,459028,524409,524345,590034,459020,524393,524329,590002,524297,524425,524361,590066,459010,524373,524309,524573,459026,524405,524341,590026,459018,524389,524325,589994,524293,524421,524357,590058,459014,524381,524317,589978,459030,524413,524349,590042,459022,524397,524333,590010,524301,524429,524365,590074,459009,524371,524307,524571,459025,524403,524339,590022,459017,524387,524323,589990,524291,524419,524355,590054,459013,524379,524315,589974,459029,524411,524347,590038,459021,524395,524331,590006,524299,524427,524363,590070,459011,524375,524311,524575,459027,524407,524343,590030,459019,524391,524327,589998,524295,524423,524359,590062,459015,524383,524319,589982,459031,524415,524351,590046,459023,524399,524335,590014,524303,524431,524367,590078,459008,524368,524304,524568,459024,524400,524336,590017,459016,524384,524320,589985,524288,524416,524352,590049,459012,524376,524312,589969,459028,524408,524344,590033,459020,524392,524328,590001,524296,524424,524360,590065,459010,524372,524308,524572,459026,524404,524340,590025,459018,524388,524324,589993,524292,524420,524356,590057,459014,524380,524316,589977,459030,524412,524348,590041,459022,524396,524332,590009,524300,524428,524364,590073,459009,524370,524306,524570,459025,524402,524338,590021,459017,524386,524322,589989,524290,524418,524354,590053,459013,524378,524314,589973,459029,524410,524346,590037,459021,524394,524330,590005,524298,524426,524362,590069,459011,524374,524310,524574,459027,524406,524342,590029,459019,524390,524326,589997,524294,524422,524358,590061,459015,524382,524318,589981,459031,524414,524350,590045,459023,524398,524334,590013,524302,524430,524366,590077,459008,524369,524305,524569,459024,524401,524337,590019,459016,524385,524321,589987,524289,524417,524353,590051,459012,524377,524313,589971,459028,524409,524345,590035,459020,524393,524329,590003,524297,524425,524361,590067,459010,524373,524309,524573,459026,524405,524341,590027,459018,524389,524325,589995,524293,524421,524357,590059,459014,524381,524317,589979,459030,524413,524349,590043,459022,524397,524333,590011,524301,524429,524365,590075,459009,524371,524307,524571,459025,524403,524339,590023,459017,524387,524323,589991,524291,524419,524355,590055,459013,524379,524315,589975,459029,524411,524347,590039,459021,524395,524331,590007,524299,524427,524363,590071,459011,524375,524311,524575,459027,524407,524343,590031,459019,524391,524327,589999,524295,524423,524359,590063,459015,524383,524319,589983,459031,524415,524351,590047,459023,524399,524335,590015,524303,524431,524367,590079]),9],Ka=[new Int32Array([327680,327696,327688,327704,327684,327700,327692,327708,327682,327698,327690,327706,327686,327702,327694,0,327681,327697,327689,327705,327685,327701,327693,327709,327683,327699,327691,327707,327687,327703,327695,0]),5];class FlateStream extends DecodeStream{#X=!0;constructor(e,t){super(t);this.stream=e;this.dict=e.dict;const a=e.getByte(),r=e.getByte();if(-1===a||-1===r)throw new FormatError(`Invalid header in flate stream: ${a}, ${r}`);if(8!=(15&a))throw new FormatError(`Unknown compression method in flate stream: ${a}, ${r}`);if(((a<<8)+r)%31!=0)throw new FormatError(`Bad FCHECK in flate stream: ${a}, ${r}`);if(32&r)throw new FormatError(`FDICT bit set in flate stream: ${a}, ${r}`);this.codeSize=0;this.codeBuf=0}async getImageData(e,t){const a=await this.asyncGetBytes();return a?a.length<=e?a:a.subarray(0,e):this.getBytes(e)}async asyncGetBytes(){this.stream.reset();const e=this.stream.isAsync?await this.stream.asyncGetBytes():this.stream.getBytes();try{const{readable:t,writable:a}=new DecompressionStream("deflate"),r=a.getWriter();await r.ready;r.write(e).then(async()=>{await r.ready;await r.close()}).catch(()=>{});const i=[];let n=0;for await(const e of t){i.push(e);n+=e.byteLength}const s=new Uint8Array(n);let o=0;for(const e of i){s.set(e,o);o+=e.byteLength}return s}catch{this.#X=!1;this.stream=new Stream(e,2,e.length,this.stream.dict);this.reset();return null}}get isAsync(){return this.#X}getBits(e){const t=this.stream;let a,r=this.codeSize,i=this.codeBuf;for(;r>e;this.codeSize=r-=e;return a}getCode(e){const t=this.stream,a=e[0],r=e[1];let i,n=this.codeSize,s=this.codeBuf;for(;n>16,l=65535&o;if(c<1||n>c;this.codeSize=n-c;return l}generateHuffmanTable(e){const t=e.length;let a,r=0;for(a=0;ar&&(r=e[a]);const i=1<>=1}for(a=e;a>=1;if(0===t){let t;if(-1===(t=r.getByte())){this.#q("Bad block header in flate stream");return}let a=t;if(-1===(t=r.getByte())){this.#q("Bad block header in flate stream");return}a|=t<<8;if(-1===(t=r.getByte())){this.#q("Bad block header in flate stream");return}let i=t;if(-1===(t=r.getByte())){this.#q("Bad block header in flate stream");return}i|=t<<8;if(i!==(65535&~a)&&(0!==a||0!==i))throw new FormatError("Bad uncompressed block length in flate stream");this.codeBuf=0;this.codeSize=0;const n=this.bufferLength,s=n+a;e=this.ensureBuffer(s);this.bufferLength=s;if(0===a)-1===r.peekByte()&&(this.eof=!0);else{const t=r.getBytes(a);e.set(t,n);t.length0;)h[o++]=f}i=this.generateHuffmanTable(h.subarray(0,e));n=this.generateHuffmanTable(h.subarray(e,l))}}e=this.buffer;let s=e?e.length:0,o=this.bufferLength;for(;;){let t=this.getCode(i);if(t<256){if(o+1>=s){e=this.ensureBuffer(o+1);s=e.length}e[o++]=t;continue}if(256===t){this.bufferLength=o;return}t-=257;t=$a[t];let r=t>>16;r>0&&(r=this.getBits(r));a=(65535&t)+r;t=this.getCode(n);t=za[t];r=t>>16;r>0&&(r=this.getBits(r));const c=(65535&t)+r;if(o+a>=s){e=this.ensureBuffer(o+a);s=e.length}for(let t=0;t>9&127;this.clow=this.clow<<7&65535;this.ct-=7;this.a=32768}byteIn(){const e=this.data;let t=this.bp;if(255===e[t])if(e[t+1]>143){this.clow+=65280;this.ct=8}else{t++;this.clow+=e[t]<<9;this.ct=7;this.bp=t}else{t++;this.clow+=t65535){this.chigh+=this.clow>>16;this.clow&=65535}}readBit(e,t){let a=e[t]>>1,r=1&e[t];const i=Ja[a],n=i.qe;let s,o=this.a-n;if(this.chigh>15&1;this.clow=this.clow<<1&65535;this.ct--}while(!(32768&o));this.a=o;e[t]=a<<1|r;return s}}class Jbig2Error extends ea{constructor(e){super(e,"Jbig2Error")}}class ContextCache{getContexts(e){return e in this?this[e]:this[e]=new Int8Array(65536)}}class DecodingContext{constructor(e,t,a){this.data=e;this.start=t;this.end=a}get decoder(){return shadow(this,"decoder",new ArithmeticDecoder(this.data,this.start,this.end))}get contextCache(){return shadow(this,"contextCache",new ContextCache)}}function decodeInteger(e,t,a){const r=e.getContexts(t);let i=1;function readBits(e){let t=0;for(let n=0;n>>0}const n=readBits(1),s=readBits(1)?readBits(1)?readBits(1)?readBits(1)?readBits(1)?readBits(32)+4436:readBits(12)+340:readBits(8)+84:readBits(6)+20:readBits(4)+4:readBits(2);let o;0===n?o=s:s>0&&(o=-s);return o>=-2147483648&&o<=da?o:null}function decodeIAID(e,t,a){const r=e.getContexts("IAID");let i=1;for(let e=0;ee.y-t.y||e.x-t.x);const h=l.length,u=new Int8Array(h),d=new Int8Array(h),f=[];let g,p,m=0,b=0,y=0,w=0;for(p=0;p=v&&E=F){q=q<<1&m;for(p=0;p=0&&_=0){U=M[L][_];U&&(q|=U<=e?l<<=1:l=l<<1|x[o][c]}for(f=0;f=w||c<0||c>=y?l<<=1:l=l<<1|r[o][c]}const g=k.readBit(C,l);t[s]=g}}return x}function decodeTextRegion(e,t,a,r,i,n,s,o,c,l,h,u,d,f,g,p,m,b,y){if(e&&t)throw new Jbig2Error("refinement with Huffman is not supported");const w=[];let S,x;for(S=0;S1&&(i=e?y.readBits(b):decodeInteger(C,"IAIT",k));const n=s*v+i,F=e?f.symbolIDTable.decode(y):decodeIAID(C,k,c),T=t&&(e?y.readBit():decodeInteger(C,"IARI",k));let O=o[F],D=O[0].length,M=O.length;if(T){const e=decodeInteger(C,"IARDW",k),t=decodeInteger(C,"IARDH",k);D+=e;M+=t;O=decodeRefinement(D,M,g,O,(e>>1)+decodeInteger(C,"IARDX",k),(t>>1)+decodeInteger(C,"IARDY",k),!1,p,m)}let R=0;l?1&u?R=M-1:r+=M-1:u>1?r+=D-1:R=D-1;const N=n-(1&u?0:M-1),E=r-(2&u?D-1:0);let L,_,U;if(l)for(L=0;L>5&7;const c=[31&s];let l=t+6;if(7===o){o=536870911&readUint32(e,l-1);l+=3;let t=o+8>>3;c[0]=e[l++];for(;--t>0;)c.push(e[l++])}else if(5===o||6===o)throw new Jbig2Error("invalid referred-to flags");a.retainBits=c;let h=4;a.number<=256?h=1:a.number<=65536&&(h=2);const u=[];let d,f;for(d=0;d>>24&255;n[3]=t.height>>16&255;n[4]=t.height>>8&255;n[5]=255&t.height;for(d=l,f=e.length;d>2&3;e.huffmanDWSelector=t>>4&3;e.bitmapSizeSelector=t>>6&1;e.aggregationInstancesSelector=t>>7&1;e.bitmapCodingContextUsed=!!(256&t);e.bitmapCodingContextRetained=!!(512&t);e.template=t>>10&3;e.refinementTemplate=t>>12&1;l+=2;if(!e.huffman){c=0===e.template?4:1;s=[];for(o=0;o>2&3;h.stripSize=1<>4&3;h.transposed=!!(64&u);h.combinationOperator=u>>7&3;h.defaultPixelValue=u>>9&1;h.dsOffset=u<<17>>27;h.refinementTemplate=u>>15&1;if(h.huffman){const e=readUint16(r,l);l+=2;h.huffmanFS=3&e;h.huffmanDS=e>>2&3;h.huffmanDT=e>>4&3;h.huffmanRefinementDW=e>>6&3;h.huffmanRefinementDH=e>>8&3;h.huffmanRefinementDX=e>>10&3;h.huffmanRefinementDY=e>>12&3;h.huffmanRefinementSizeSelector=!!(16384&e)}if(h.refinement&&!h.refinementTemplate){s=[];for(o=0;o<2;o++){s.push({x:readInt8(r,l),y:readInt8(r,l+1)});l+=2}h.refinementAt=s}h.numberOfSymbolInstances=readUint32(r,l);l+=4;n=[h,a.referredTo,r,l,i];break;case 16:const d={},f=r[l++];d.mmr=!!(1&f);d.template=f>>1&3;d.patternWidth=r[l++];d.patternHeight=r[l++];d.maxPatternIndex=readUint32(r,l);l+=4;n=[d,a.number,r,l,i];break;case 22:case 23:const g={};g.info=readRegionSegmentInformation(r,l);l+=ar;const p=r[l++];g.mmr=!!(1&p);g.template=p>>1&3;g.enableSkip=!!(8&p);g.combinationOperator=p>>4&7;g.defaultPixelValue=p>>7&1;g.gridWidth=readUint32(r,l);l+=4;g.gridHeight=readUint32(r,l);l+=4;g.gridOffsetX=4294967295&readUint32(r,l);l+=4;g.gridOffsetY=4294967295&readUint32(r,l);l+=4;g.gridVectorX=readUint16(r,l);l+=2;g.gridVectorY=readUint16(r,l);l+=2;n=[g,a.referredTo,r,l,i];break;case 38:case 39:const m={};m.info=readRegionSegmentInformation(r,l);l+=ar;const b=r[l++];m.mmr=!!(1&b);m.template=b>>1&3;m.prediction=!!(8&b);if(!m.mmr){c=0===m.template?4:1;s=[];for(o=0;o>2&1;y.combinationOperator=w>>3&3;y.requiresBuffer=!!(32&w);y.combinationOperatorOverride=!!(64&w);n=[y];break;case 49:case 50:case 51:case 62:break;case 53:n=[a.number,r,l,i];break;default:throw new Jbig2Error(`segment type ${a.typeName}(${a.type}) is not implemented`)}const h="on"+a.typeName;h in t&&t[h].apply(t,n)}function processSegments(e,t){for(let a=0,r=e.length;a>3,a=new Uint8ClampedArray(t*e.height);e.defaultPixelValue&&a.fill(255);this.buffer=a}drawBitmap(e,t){const a=this.currentPageInfo,r=e.width,i=e.height,n=a.width+7>>3,s=a.combinationOperatorOverride?e.combinationOperator:a.combinationOperator,o=this.buffer,c=128>>(7&e.x);let l,h,u,d,f=e.y*n+(e.x>>3);switch(s){case 0:for(l=0;l>=1;if(!u){u=128;d++}}f+=n}break;case 2:for(l=0;l>=1;if(!u){u=128;d++}}f+=n}break;default:throw new Jbig2Error(`operator ${s} is not supported`)}}onImmediateGenericRegion(e,t,a,r){const i=e.info,n=new DecodingContext(t,a,r),s=decodeBitmap(e.mmr,i.width,i.height,e.template,e.prediction,null,e.at,n);this.drawBitmap(i,s)}onImmediateLosslessGenericRegion(){this.onImmediateGenericRegion(...arguments)}onSymbolDictionary(e,t,a,r,i,n){let s,o;if(e.huffman){s=function getSymbolDictionaryHuffmanTables(e,t,a){let r,i,n,s,o=0;switch(e.huffmanDHSelector){case 0:case 1:r=getStandardTable(e.huffmanDHSelector+4);break;case 3:r=getCustomHuffmanTable(o,t,a);o++;break;default:throw new Jbig2Error("invalid Huffman DH selector")}switch(e.huffmanDWSelector){case 0:case 1:i=getStandardTable(e.huffmanDWSelector+2);break;case 3:i=getCustomHuffmanTable(o,t,a);o++;break;default:throw new Jbig2Error("invalid Huffman DW selector")}if(e.bitmapSizeSelector){n=getCustomHuffmanTable(o,t,a);o++}else n=getStandardTable(1);s=e.aggregationInstancesSelector?getCustomHuffmanTable(o,t,a):getStandardTable(1);return{tableDeltaHeight:r,tableDeltaWidth:i,tableBitmapSize:n,tableAggregateInstances:s}}(e,a,this.customTables);o=new Reader(r,i,n)}let c=this.symbols;c||(this.symbols=c={});const l=[];for(const e of a){const t=c[e];t&&l.push(...t)}const h=new DecodingContext(r,i,n);c[t]=function decodeSymbolDictionary(e,t,a,r,i,n,s,o,c,l,h,u){if(e&&t)throw new Jbig2Error("symbol refinement with Huffman is not supported");const d=[];let f=0,g=log2(a.length+r);const p=h.decoder,m=h.contextCache;let b,y;if(e){b=getStandardTable(1);y=[];g=Math.max(g,1)}for(;d.length1)w=decodeTextRegion(e,t,r,f,0,i,1,a.concat(d),g,0,0,1,0,n,c,l,h,0,u);else{const e=decodeIAID(m,p,g),t=decodeInteger(m,"IARDX",p),i=decodeInteger(m,"IARDY",p);w=decodeRefinement(r,f,c,e=32){let a,r,s;switch(t){case 32:if(0===e)throw new Jbig2Error("no previous value in symbol ID table");r=i.readBits(2)+3;a=n[e-1].prefixLength;break;case 33:r=i.readBits(3)+3;a=0;break;case 34:r=i.readBits(7)+11;a=0;break;default:throw new Jbig2Error("invalid code length in symbol ID table")}for(s=0;s=0;m--){O=e?decodeMMRBitmap(T,c,l,!0):decodeBitmap(!1,c,l,a,!1,null,v,g);F[m]=O}for(D=0;D=0;b--){R^=F[b][D][M];N|=R<>8;_=u+D*d-M*f>>8;if(L>=0&&L+x<=r&&_>=0&&_+k<=i)for(m=0;m=i)){j=p[t];U=E[m];for(b=0;b=0&&e>1&7),c=1+(r>>4&7),l=[];let h,u,d=i;do{h=s.readBits(o);u=s.readBits(c);l.push(new HuffmanLine([d,h,u,0]));d+=1<>t&1;if(t<=0)this.children[a]=new HuffmanTreeNode(e);else{let r=this.children[a];r||(this.children[a]=r=new HuffmanTreeNode(null));r.buildTree(e,t-1)}}decodeNode(e){if(this.isLeaf){if(this.isOOB)return null;const t=e.readBits(this.rangeLength);return this.rangeLow+(this.isLowerRange?-t:t)}const t=this.children[e.readBit()];if(!t)throw new Jbig2Error("invalid Huffman data");return t.decodeNode(e)}}class HuffmanTable{constructor(e,t){t||this.assignPrefixCodes(e);this.rootNode=new HuffmanTreeNode(null);for(let t=0,a=e.length;t0&&this.rootNode.buildTree(a,a.prefixLength-1)}}decode(e){return this.rootNode.decodeNode(e)}assignPrefixCodes(e){const t=e.length;let a=0;for(let r=0;r=this.end)throw new Jbig2Error("end of data while reading bit");this.currentByte=this.data[this.position++];this.shift=7}const e=this.currentByte>>this.shift&1;this.shift--;return e}readBits(e){let t,a=0;for(t=e-1;t>=0;t--)a|=this.readBit()<=this.end?-1:this.data[this.position++]}}function getCustomHuffmanTable(e,t,a){let r=0;for(let i=0,n=t.length;i>a&1;a--}}if(r&&!o){const e=5;for(let t=0;t>>t&(1<0;if(e<256){d[0]=e;f=1}else{if(!(e>=258)){if(256===e){h=9;s=258;f=0;continue}this.eof=!0;delete this.lzwState;break}if(e=0;t--){d[t]=o[a];a=l[a]}}else d[f++]=d[0]}if(i){l[s]=u;c[s]=c[u]+1;o[s]=d[0];s++;h=s+n&s+n-1?h:0|Math.min(Math.log(s+n)/.6931471805599453+1,12)}u=e;g+=f;if(r15))throw new FormatError(`Unsupported predictor: ${r}`);this.readBlock=2===r?this.readBlockTiff:this.readBlockPng;this.stream=e;this.dict=e.dict;const i=this.colors=a.get("Colors")||1,n=this.bits=a.get("BPC","BitsPerComponent")||8,s=this.columns=a.get("Columns")||1;this.pixBytes=i*n+7>>3;this.rowBytes=s*i*n+7>>3;return this}readBlockTiff(){const e=this.rowBytes,t=this.bufferLength,a=this.ensureBuffer(t+e),r=this.bits,i=this.colors,n=this.stream.getBytes(e);this.eof=!n.length;if(this.eof)return;let s,o=0,c=0,l=0,h=0,u=t;if(1===r&&1===i)for(s=0;s>1;e^=e>>2;e^=e>>4;o=(1&e)<<7;a[u++]=e}else if(8===r){for(s=0;s>8&255;a[u++]=255&e}}else{const e=new Uint8Array(i+1),u=(1<>l-r)&u;l-=r;c=c<=8){a[f++]=c>>h-8&255;h-=8}}h>0&&(a[f++]=(c<<8-h)+(o&(1<<8-h)-1))}this.bufferLength+=e}readBlockPng(){const e=this.rowBytes,t=this.pixBytes,a=this.stream.getByte(),r=this.stream.getBytes(e);this.eof=!r.length;if(this.eof)return;const i=this.bufferLength,n=this.ensureBuffer(i+e);let s=n.subarray(i-e,i);0===s.length&&(s=new Uint8Array(e));let o,c,l,h=i;switch(a){case 0:for(o=0;o>1)+r[o];for(;o>1)+r[o]&255;h++}break;case 4:for(o=0;o0){const e=this.stream.getBytes(r);t.set(e,a);a+=r}}else{r=257-r;t=this.ensureBuffer(a+r+1);t.fill(e[1],a,a+r);a+=r}this.bufferLength=a}}class Parser{constructor({lexer:e,xref:t,allowStreams:a=!1,recoveryMode:r=!1}){this.lexer=e;this.xref=t;this.allowStreams=a;this.recoveryMode=r;this.imageCache=Object.create(null);this._imageId=0;this.refill()}refill(){this.buf1=this.lexer.getObj();this.buf2=this.lexer.getObj()}shift(){if(this.buf2 instanceof Cmd&&"ID"===this.buf2.cmd){this.buf1=this.buf2;this.buf2=null}else{this.buf1=this.buf2;this.buf2=this.lexer.getObj()}}tryShift(){try{this.shift();return!0}catch(e){if(e instanceof MissingDataException)throw e;return!1}}getObj(e=null){const t=this.buf1;this.shift();if(t instanceof Cmd)switch(t.cmd){case"BI":return this.makeInlineImage(e);case"[":const a=[];for(;!isCmd(this.buf1,"]")&&this.buf1!==sa;)a.push(this.getObj(e));if(this.buf1===sa){if(this.recoveryMode)return a;throw new ParserEOFException("End of file inside array.")}this.shift();return a;case"<<":const r=new Dict(this.xref);for(;!isCmd(this.buf1,">>")&&this.buf1!==sa;){if(!(this.buf1 instanceof Name)){info("Malformed dictionary: key must be a name object");this.shift();continue}const t=this.buf1.name;this.shift();if(this.buf1===sa)break;r.set(t,this.getObj(e))}if(this.buf1===sa){if(this.recoveryMode)return r;throw new ParserEOFException("End of file inside dictionary.")}if(isCmd(this.buf2,"stream"))return this.allowStreams?this.makeStream(r,e):r;this.shift();return r;default:return t}if(Number.isInteger(t)){if(Number.isInteger(this.buf1)&&isCmd(this.buf2,"R")){const e=Ref.get(t,this.buf1);this.shift();this.shift();return e}return t}return"string"==typeof t&&e?e.decryptString(t):t}findDefaultInlineStreamEnd(e){const{knownCommands:t}=this.lexer,a=e.pos;let r,i,n=0;for(;-1!==(r=e.getByte());)if(0===n)n=69===r?1:0;else if(1===n)n=73===r?2:0;else if(32===r||10===r||13===r){i=e.pos;const a=e.peekBytes(15),s=a.length;if(0===s)break;for(let e=0;e127))){n=0;break}}if(2!==n)continue;if(!t){warn("findDefaultInlineStreamEnd - `lexer.knownCommands` is undefined.");continue}const o=new Lexer(new Stream(e.peekBytes(75)),t);o._hexStringWarn=()=>{};let c=0;for(;;){const e=o.getObj();if(e===sa){n=0;break}if(e instanceof Cmd){const a=t[e.cmd];if(!a){n=0;break}if(a.variableArgs?c<=a.numArgs:c===a.numArgs)break;c=0;continue}c++}if(2===n)break}else n=0;if(-1===r){warn("findDefaultInlineStreamEnd: Reached the end of the stream without finding a valid EI marker");if(i){warn('... trying to recover by using the last "EI" occurrence.');e.skip(-(e.pos-i))}}let s=4;e.skip(-s);r=e.peekByte();e.skip(s);isWhiteSpace(r)||s--;return e.pos-s-a}findDCTDecodeInlineStreamEnd(e){const t=e.pos;let a,r,i=!1;for(;-1!==(a=e.getByte());)if(255===a){switch(e.getByte()){case 0:break;case 255:e.skip(-1);break;case 217:i=!0;break;case 192:case 193:case 194:case 195:case 197:case 198:case 199:case 201:case 202:case 203:case 205:case 206:case 207:case 196:case 204:case 218:case 219:case 220:case 221:case 222:case 223:case 224:case 225:case 226:case 227:case 228:case 229:case 230:case 231:case 232:case 233:case 234:case 235:case 236:case 237:case 238:case 239:case 254:r=e.getUint16();r>2?e.skip(r-2):e.skip(-2)}if(i)break}const n=e.pos-t;if(-1===a){warn("Inline DCTDecode image stream: EOI marker not found, searching for /EI/ instead.");e.skip(-n);return this.findDefaultInlineStreamEnd(e)}this.inlineStreamSkipEI(e);return n}findASCII85DecodeInlineStreamEnd(e){const t=e.pos;let a;for(;-1!==(a=e.getByte());)if(126===a){const t=e.pos;a=e.peekByte();for(;isWhiteSpace(a);){e.skip();a=e.peekByte()}if(62===a){e.skip();break}if(e.pos>t){const t=e.peekBytes(2);if(69===t[0]&&73===t[1])break}}const r=e.pos-t;if(-1===a){warn("Inline ASCII85Decode image stream: EOD marker not found, searching for /EI/ instead.");e.skip(-r);return this.findDefaultInlineStreamEnd(e)}this.inlineStreamSkipEI(e);return r}findASCIIHexDecodeInlineStreamEnd(e){const t=e.pos;let a;for(;-1!==(a=e.getByte())&&62!==a;);const r=e.pos-t;if(-1===a){warn("Inline ASCIIHexDecode image stream: EOD marker not found, searching for /EI/ instead.");e.skip(-r);return this.findDefaultInlineStreamEnd(e)}this.inlineStreamSkipEI(e);return r}inlineStreamSkipEI(e){let t,a=0;for(;-1!==(t=e.getByte());)if(0===a)a=69===t?1:0;else if(1===a)a=73===t?2:0;else if(2===a)break}makeInlineImage(e){const t=this.lexer,a=t.stream,r=Object.create(null);let i;for(;!isCmd(this.buf1,"ID")&&this.buf1!==sa;){if(!(this.buf1 instanceof Name))throw new FormatError("Dictionary key must be a name object");const t=this.buf1.name;this.shift();if(this.buf1===sa)break;r[t]=this.getObj(e)}-1!==t.beginInlineImagePos&&(i=a.pos-t.beginInlineImagePos);const n=this.xref.fetchIfRef(r.F||r.Filter);let s;if(n instanceof Name)s=n.name;else if(Array.isArray(n)){const e=this.xref.fetchIfRef(n[0]);e instanceof Name&&(s=e.name)}const o=a.pos;let c,l;switch(s){case"DCT":case"DCTDecode":c=this.findDCTDecodeInlineStreamEnd(a);break;case"A85":case"ASCII85Decode":c=this.findASCII85DecodeInlineStreamEnd(a);break;case"AHx":case"ASCIIHexDecode":c=this.findASCIIHexDecodeInlineStreamEnd(a);break;default:c=this.findDefaultInlineStreamEnd(a)}if(c<1e3&&i>0){const e=a.pos;a.pos=t.beginInlineImagePos;l=function getInlineImageCacheKey(e){const t=[],a=e.length;let r=0;for(;r=r){let r=!1;for(const e of i){const t=e.length;let i=0;for(;i=n){r=!0;break}if(i>=t){if(isWhiteSpace(s[c+o+i])){info(`Found "${bytesToString([...a,...e])}" when searching for endstream command.`);r=!0}break}}if(r){t.pos+=c;return t.pos-e}}c++}t.pos+=o}return-1}makeStream(e,t){const a=this.lexer;let r=a.stream;a.skipToNextLine();const i=r.pos-1;let n=e.get("Length");if(!Number.isInteger(n)){info(`Bad length "${n&&n.toString()}" in stream.`);n=0}r.pos=i+n;a.nextChar();if(this.tryShift()&&isCmd(this.buf2,"endstream"))this.shift();else{n=this.#H(i);if(n<0)throw new FormatError("Missing endstream command.");a.nextChar();this.shift();this.shift()}this.shift();r=r.makeSubStream(i,n,e);t&&(r=t.createStream(r,n));r=this.filter(r,e,n);r.dict=e;return r}filter(e,t,a){let r=t.get("F","Filter"),i=t.get("DP","DecodeParms");if(r instanceof Name){Array.isArray(i)&&warn("/DecodeParms should not be an Array, when /Filter is a Name.");return this.makeFilter(e,r.name,a,i)}let n=a;if(Array.isArray(r)){const t=r,a=i;for(let s=0,o=t.length;s=48&&e<=57?15&e:e>=65&&e<=70||e>=97&&e<=102?9+(15&e):-1}class Lexer{constructor(e,t=null){this.stream=e;this.nextChar();this.strBuf=[];this.knownCommands=t;this._hexStringNumWarn=0;this.beginInlineImagePos=-1}nextChar(){return this.currentChar=this.stream.getByte()}peekChar(){return this.stream.peekByte()}getNumber(){let e=this.currentChar,t=!1,a=0,r=1;if(45===e){r=-1;e=this.nextChar();45===e&&(e=this.nextChar())}else 43===e&&(e=this.nextChar());if(10===e||13===e)do{e=this.nextChar()}while(10===e||13===e);if(46===e){a=10;e=this.nextChar()}if(e<48||e>57){const t=`Invalid number: ${String.fromCharCode(e)} (charCode ${e})`;if(isWhiteSpace(e)||40===e||60===e||-1===e){info(`Lexer.getNumber - "${t}".`);return 0}throw new FormatError(t)}let i=e-48,n=0,s=1;for(;(e=this.nextChar())>=0;)if(e>=48&&e<=57){const r=e-48;if(t)n=10*n+r;else{0!==a&&(a*=10);i=10*i+r}}else if(46===e){if(0!==a)break;a=1}else if(45===e)warn("Badly formatted number: minus sign in the middle");else{if(69!==e&&101!==e)break;e=this.peekChar();if(43===e||45===e){s=45===e?-1:1;this.nextChar()}else if(e<48||e>57)break;t=!0}0!==a&&(i/=a);t&&(i*=10**(s*n));return r*i}getString(){let e=1,t=!1;const a=this.strBuf;a.length=0;let r=this.nextChar();for(;;){let i=!1;switch(0|r){case-1:warn("Unterminated string");t=!0;break;case 40:++e;a.push("(");break;case 41:if(0===--e){this.nextChar();t=!0}else a.push(")");break;case 92:r=this.nextChar();switch(r){case-1:warn("Unterminated string");t=!0;break;case 110:a.push("\n");break;case 114:a.push("\r");break;case 116:a.push("\t");break;case 98:a.push("\b");break;case 102:a.push("\f");break;case 92:case 40:case 41:a.push(String.fromCharCode(r));break;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:let e=15&r;r=this.nextChar();i=!0;if(r>=48&&r<=55){e=(e<<3)+(15&r);r=this.nextChar();if(r>=48&&r<=55){i=!1;e=(e<<3)+(15&r)}}a.push(String.fromCharCode(e));break;case 13:10===this.peekChar()&&this.nextChar();break;case 10:break;default:a.push(String.fromCharCode(r))}break;default:a.push(String.fromCharCode(r))}if(t)break;i||(r=this.nextChar())}return a.join("")}getName(){let e,t;const a=this.strBuf;a.length=0;for(;(e=this.nextChar())>=0&&!ir[e];)if(35===e){e=this.nextChar();if(ir[e]){warn("Lexer_getName: NUMBER SIGN (#) should be followed by a hexadecimal number.");a.push("#");break}const r=toHexDigit(e);if(-1!==r){t=e;e=this.nextChar();const i=toHexDigit(e);if(-1===i){warn(`Lexer_getName: Illegal digit (${String.fromCharCode(e)}) in hexadecimal number.`);a.push("#",String.fromCharCode(t));if(ir[e])break;a.push(String.fromCharCode(e));continue}a.push(String.fromCharCode(r<<4|i))}else a.push("#",String.fromCharCode(e))}else a.push(String.fromCharCode(e));a.length>127&&warn(`Name token is longer than allowed by the spec: ${a.length}`);return Name.get(a.join(""))}_hexStringWarn(e){5!==this._hexStringNumWarn++?this._hexStringNumWarn>5||warn(`getHexString - ignoring invalid character: ${e}`):warn("getHexString - ignoring additional invalid characters.")}getHexString(){const e=this.strBuf;e.length=0;let t=this.currentChar,a=-1,r=-1;this._hexStringNumWarn=0;for(;;){if(t<0){warn("Unterminated hex string");break}if(62===t){this.nextChar();break}if(1!==ir[t]){r=toHexDigit(t);if(-1===r)this._hexStringWarn(t);else if(-1===a)a=r;else{e.push(String.fromCharCode(a<<4|r));a=-1}t=this.nextChar()}else t=this.nextChar()}-1!==a&&e.push(String.fromCharCode(a<<4));return e.join("")}getObj(){let e=!1,t=this.currentChar;for(;;){if(t<0)return sa;if(e)10!==t&&13!==t||(e=!1);else if(37===t)e=!0;else if(1!==ir[t])break;t=this.nextChar()}switch(0|t){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 43:case 45:case 46:return this.getNumber();case 40:return this.getString();case 47:return this.getName();case 91:this.nextChar();return Cmd.get("[");case 93:this.nextChar();return Cmd.get("]");case 60:t=this.nextChar();if(60===t){this.nextChar();return Cmd.get("<<")}return this.getHexString();case 62:t=this.nextChar();if(62===t){this.nextChar();return Cmd.get(">>")}return Cmd.get(">");case 123:this.nextChar();return Cmd.get("{");case 125:this.nextChar();return Cmd.get("}");case 41:this.nextChar();throw new FormatError(`Illegal character: ${t}`)}let a=String.fromCharCode(t);if(t<32||t>127){const e=this.peekChar();if(e>=32&&e<=127){this.nextChar();return Cmd.get(a)}}const r=this.knownCommands;let i=void 0!==r?.[a];for(;(t=this.nextChar())>=0&&!ir[t];){const e=a+String.fromCharCode(t);if(i&&void 0===r[e])break;if(128===a.length)throw new FormatError(`Command token too long: ${a.length}`);a=e;i=void 0!==r?.[a]}if("true"===a)return!0;if("false"===a)return!1;if("null"===a)return null;"BI"===a&&(this.beginInlineImagePos=this.stream.pos);return Cmd.get(a)}skipToNextLine(){let e=this.currentChar;for(;e>=0;){if(13===e){e=this.nextChar();10===e&&this.nextChar();break}if(10===e){this.nextChar();break}e=this.nextChar()}}}class Linearization{static create(e){function getInt(e,t,a=!1){const r=e.get(t);if(Number.isInteger(r)&&(a?r>=0:r>0))return r;throw new Error(`The "${t}" parameter in the linearization dictionary is invalid.`)}const t=new Parser({lexer:new Lexer(e),xref:null}),a=t.getObj(),r=t.getObj(),i=t.getObj(),n=t.getObj();let s,o;if(!(Number.isInteger(a)&&Number.isInteger(r)&&isCmd(i,"obj")&&n instanceof Dict&&"number"==typeof(s=n.get("Linearized"))&&s>0))return null;if((o=getInt(n,"L"))!==e.length)throw new Error('The "L" parameter in the linearization dictionary does not equal the stream length.');return{length:o,hints:function getHints(e){const t=e.get("H");let a;if(Array.isArray(t)&&(2===(a=t.length)||4===a)){for(let e=0;e0))throw new Error(`Hint (${e}) in the linearization dictionary is invalid.`)}return t}throw new Error("Hint array in the linearization dictionary is invalid.")}(n),objectNumberFirst:getInt(n,"O"),endFirst:getInt(n,"E"),numPages:getInt(n,"N"),mainXRefEntriesOffset:getInt(n,"T"),pageFirst:n.has("P")?getInt(n,"P",!0):0}}}const nr=["Adobe-GB1-UCS2","Adobe-CNS1-UCS2","Adobe-Japan1-UCS2","Adobe-Korea1-UCS2","78-EUC-H","78-EUC-V","78-H","78-RKSJ-H","78-RKSJ-V","78-V","78ms-RKSJ-H","78ms-RKSJ-V","83pv-RKSJ-H","90ms-RKSJ-H","90ms-RKSJ-V","90msp-RKSJ-H","90msp-RKSJ-V","90pv-RKSJ-H","90pv-RKSJ-V","Add-H","Add-RKSJ-H","Add-RKSJ-V","Add-V","Adobe-CNS1-0","Adobe-CNS1-1","Adobe-CNS1-2","Adobe-CNS1-3","Adobe-CNS1-4","Adobe-CNS1-5","Adobe-CNS1-6","Adobe-GB1-0","Adobe-GB1-1","Adobe-GB1-2","Adobe-GB1-3","Adobe-GB1-4","Adobe-GB1-5","Adobe-Japan1-0","Adobe-Japan1-1","Adobe-Japan1-2","Adobe-Japan1-3","Adobe-Japan1-4","Adobe-Japan1-5","Adobe-Japan1-6","Adobe-Korea1-0","Adobe-Korea1-1","Adobe-Korea1-2","B5-H","B5-V","B5pc-H","B5pc-V","CNS-EUC-H","CNS-EUC-V","CNS1-H","CNS1-V","CNS2-H","CNS2-V","ETHK-B5-H","ETHK-B5-V","ETen-B5-H","ETen-B5-V","ETenms-B5-H","ETenms-B5-V","EUC-H","EUC-V","Ext-H","Ext-RKSJ-H","Ext-RKSJ-V","Ext-V","GB-EUC-H","GB-EUC-V","GB-H","GB-V","GBK-EUC-H","GBK-EUC-V","GBK2K-H","GBK2K-V","GBKp-EUC-H","GBKp-EUC-V","GBT-EUC-H","GBT-EUC-V","GBT-H","GBT-V","GBTpc-EUC-H","GBTpc-EUC-V","GBpc-EUC-H","GBpc-EUC-V","H","HKdla-B5-H","HKdla-B5-V","HKdlb-B5-H","HKdlb-B5-V","HKgccs-B5-H","HKgccs-B5-V","HKm314-B5-H","HKm314-B5-V","HKm471-B5-H","HKm471-B5-V","HKscs-B5-H","HKscs-B5-V","Hankaku","Hiragana","KSC-EUC-H","KSC-EUC-V","KSC-H","KSC-Johab-H","KSC-Johab-V","KSC-V","KSCms-UHC-H","KSCms-UHC-HW-H","KSCms-UHC-HW-V","KSCms-UHC-V","KSCpc-EUC-H","KSCpc-EUC-V","Katakana","NWP-H","NWP-V","RKSJ-H","RKSJ-V","Roman","UniCNS-UCS2-H","UniCNS-UCS2-V","UniCNS-UTF16-H","UniCNS-UTF16-V","UniCNS-UTF32-H","UniCNS-UTF32-V","UniCNS-UTF8-H","UniCNS-UTF8-V","UniGB-UCS2-H","UniGB-UCS2-V","UniGB-UTF16-H","UniGB-UTF16-V","UniGB-UTF32-H","UniGB-UTF32-V","UniGB-UTF8-H","UniGB-UTF8-V","UniJIS-UCS2-H","UniJIS-UCS2-HW-H","UniJIS-UCS2-HW-V","UniJIS-UCS2-V","UniJIS-UTF16-H","UniJIS-UTF16-V","UniJIS-UTF32-H","UniJIS-UTF32-V","UniJIS-UTF8-H","UniJIS-UTF8-V","UniJIS2004-UTF16-H","UniJIS2004-UTF16-V","UniJIS2004-UTF32-H","UniJIS2004-UTF32-V","UniJIS2004-UTF8-H","UniJIS2004-UTF8-V","UniJISPro-UCS2-HW-V","UniJISPro-UCS2-V","UniJISPro-UTF8-V","UniJISX0213-UTF32-H","UniJISX0213-UTF32-V","UniJISX02132004-UTF32-H","UniJISX02132004-UTF32-V","UniKS-UCS2-H","UniKS-UCS2-V","UniKS-UTF16-H","UniKS-UTF16-V","UniKS-UTF32-H","UniKS-UTF32-V","UniKS-UTF8-H","UniKS-UTF8-V","V","WP-Symbol"],sr=2**24-1;class CMap{constructor(e=!1){this.codespaceRanges=[[],[],[],[]];this.numCodespaceRanges=0;this._map=[];this.name="";this.vertical=!1;this.useCMap=null;this.builtInCMap=e}addCodespaceRange(e,t,a){this.codespaceRanges[e-1].push(t,a);this.numCodespaceRanges++}mapCidRange(e,t,a){if(t-e>sr)throw new Error("mapCidRange - ignoring data above MAX_MAP_RANGE.");for(;e<=t;)this._map[e++]=a++}mapBfRange(e,t,a){if(t-e>sr)throw new Error("mapBfRange - ignoring data above MAX_MAP_RANGE.");const r=a.length-1;for(;e<=t;){this._map[e++]=a;const t=a.charCodeAt(r)+1;t>255?a=a.substring(0,r-1)+String.fromCharCode(a.charCodeAt(r-1)+1)+"\0":a=a.substring(0,r)+String.fromCharCode(t)}}mapBfRangeToArray(e,t,a){if(t-e>sr)throw new Error("mapBfRangeToArray - ignoring data above MAX_MAP_RANGE.");const r=a.length;let i=0;for(;e<=t&&i>>0;const s=i[n];for(let e=0,t=s.length;e=t&&r<=i){a.charcode=r;a.length=n+1;return}}}a.charcode=0;a.length=1}getCharCodeLength(e){const t=this.codespaceRanges;for(let a=0,r=t.length;a=i&&e<=n)return a+1}}return 1}get length(){return this._map.length}get isIdentityCMap(){if("Identity-H"!==this.name&&"Identity-V"!==this.name)return!1;if(65536!==this._map.length)return!1;for(let e=0;e<65536;e++)if(this._map[e]!==e)return!1;return!0}}class IdentityCMap extends CMap{constructor(e,t){super();this.vertical=e;this.addCodespaceRange(t,0,65535)}mapCidRange(e,t,a){unreachable("should not call mapCidRange")}mapBfRange(e,t,a){unreachable("should not call mapBfRange")}mapBfRangeToArray(e,t,a){unreachable("should not call mapBfRangeToArray")}mapOne(e,t){unreachable("should not call mapCidOne")}lookup(e){return Number.isInteger(e)&&e<=65535?e:void 0}contains(e){return Number.isInteger(e)&&e<=65535}forEach(e){for(let t=0;t<=65535;t++)e(t,t)}charCodeOf(e){return Number.isInteger(e)&&e<=65535?e:-1}getMap(){const e=new Array(65536);for(let t=0;t<=65535;t++)e[t]=t;return e}get length(){return 65536}get isIdentityCMap(){unreachable("should not access .isIdentityCMap")}}function strToInt(e){let t=0;for(let a=0;a>>0}function expectString(e){if("string"!=typeof e)throw new FormatError("Malformed CMap: expected string.")}function expectInt(e){if(!Number.isInteger(e))throw new FormatError("Malformed CMap: expected int.")}function parseBfChar(e,t){for(;;){let a=t.getObj();if(a===sa)break;if(isCmd(a,"endbfchar"))return;expectString(a);const r=strToInt(a);a=t.getObj();expectString(a);const i=a;e.mapOne(r,i)}}function parseBfRange(e,t){for(;;){let a=t.getObj();if(a===sa)break;if(isCmd(a,"endbfrange"))return;expectString(a);const r=strToInt(a);a=t.getObj();expectString(a);const i=strToInt(a);a=t.getObj();if(Number.isInteger(a)||"string"==typeof a){const t=Number.isInteger(a)?String.fromCharCode(a):a;e.mapBfRange(r,i,t)}else{if(!isCmd(a,"["))break;{a=t.getObj();const n=[];for(;!isCmd(a,"]")&&a!==sa;){n.push(a);a=t.getObj()}e.mapBfRangeToArray(r,i,n)}}}throw new FormatError("Invalid bf range.")}function parseCidChar(e,t){for(;;){let a=t.getObj();if(a===sa)break;if(isCmd(a,"endcidchar"))return;expectString(a);const r=strToInt(a);a=t.getObj();expectInt(a);const i=a;e.mapOne(r,i)}}function parseCidRange(e,t){for(;;){let a=t.getObj();if(a===sa)break;if(isCmd(a,"endcidrange"))return;expectString(a);const r=strToInt(a);a=t.getObj();expectString(a);const i=strToInt(a);a=t.getObj();expectInt(a);const n=a;e.mapCidRange(r,i,n)}}function parseCodespaceRange(e,t){for(;;){let a=t.getObj();if(a===sa)break;if(isCmd(a,"endcodespacerange"))return;if("string"!=typeof a)break;const r=strToInt(a);a=t.getObj();if("string"!=typeof a)break;const i=strToInt(a);e.addCodespaceRange(a.length,r,i)}throw new FormatError("Invalid codespace range.")}function parseWMode(e,t){const a=t.getObj();Number.isInteger(a)&&(e.vertical=!!a)}function parseCMapName(e,t){const a=t.getObj();a instanceof Name&&(e.name=a.name)}async function parseCMap(e,t,a,r){let i,n;e:for(;;)try{const a=t.getObj();if(a===sa)break;if(a instanceof Name){"WMode"===a.name?parseWMode(e,t):"CMapName"===a.name&&parseCMapName(e,t);i=a}else if(a instanceof Cmd)switch(a.cmd){case"endcmap":break e;case"usecmap":i instanceof Name&&(n=i.name);break;case"begincodespacerange":parseCodespaceRange(e,t);break;case"beginbfchar":parseBfChar(e,t);break;case"begincidchar":parseCidChar(e,t);break;case"beginbfrange":parseBfRange(e,t);break;case"begincidrange":parseCidRange(e,t)}}catch(e){if(e instanceof MissingDataException)throw e;warn("Invalid cMap data: "+e);continue}!r&&n&&(r=n);return r?extendCMap(e,a,r):e}async function extendCMap(e,t,a){e.useCMap=await createBuiltInCMap(a,t);if(0===e.numCodespaceRanges){const t=e.useCMap.codespaceRanges;for(let a=0;aextendCMap(i,t,e));const n=new Lexer(new Stream(a));return parseCMap(i,n,t,null)}class CMapFactory{static async create({encoding:e,fetchBuiltInCMap:t,useCMap:a}){if(e instanceof Name)return createBuiltInCMap(e.name,t);if(e instanceof BaseStream){if(e.isAsync){const t=await e.asyncGetBytes();t&&(e=new Stream(t,0,t.length,e.dict))}const r=await parseCMap(new CMap,new Lexer(e),t,a);return r.isIdentityCMap?createBuiltInCMap(r.name,t):r}throw new Error("Encoding required.")}}const or=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclamsmall","Hungarumlautsmall","","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","questionsmall","","asuperior","bsuperior","centsuperior","dsuperior","esuperior","","","","isuperior","","","lsuperior","msuperior","nsuperior","osuperior","","","rsuperior","ssuperior","tsuperior","","ff","fi","fl","ffi","ffl","parenleftinferior","","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","exclamdownsmall","centoldstyle","Lslashsmall","","","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","","Dotaccentsmall","","","Macronsmall","","","figuredash","hypheninferior","","","Ogoneksmall","Ringsmall","Cedillasmall","","","","onequarter","onehalf","threequarters","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","","","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall"],cr=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclamsmall","Hungarumlautsmall","centoldstyle","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","","threequartersemdash","","questionsmall","","","","","Ethsmall","","","onequarter","onehalf","threequarters","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","","","","","","","ff","fi","fl","ffi","ffl","parenleftinferior","","parenrightinferior","Circumflexsmall","hypheninferior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","","","asuperior","centsuperior","","","","","Aacutesmall","Agravesmall","Acircumflexsmall","Adieresissmall","Atildesmall","Aringsmall","Ccedillasmall","Eacutesmall","Egravesmall","Ecircumflexsmall","Edieresissmall","Iacutesmall","Igravesmall","Icircumflexsmall","Idieresissmall","Ntildesmall","Oacutesmall","Ogravesmall","Ocircumflexsmall","Odieresissmall","Otildesmall","Uacutesmall","Ugravesmall","Ucircumflexsmall","Udieresissmall","","eightsuperior","fourinferior","threeinferior","sixinferior","eightinferior","seveninferior","Scaronsmall","","centinferior","twoinferior","","Dieresissmall","","Caronsmall","osuperior","fiveinferior","","commainferior","periodinferior","Yacutesmall","","dollarinferior","","","Thornsmall","","nineinferior","zeroinferior","Zcaronsmall","AEsmall","Oslashsmall","questiondownsmall","oneinferior","Lslashsmall","","","","","","","Cedillasmall","","","","","","OEsmall","figuredash","hyphensuperior","","","","","exclamdownsmall","","Ydieresissmall","","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","ninesuperior","zerosuperior","","esuperior","rsuperior","tsuperior","","","isuperior","ssuperior","dsuperior","","","","","","lsuperior","Ogoneksmall","Brevesmall","Macronsmall","bsuperior","nsuperior","msuperior","commasuperior","periodsuperior","Dotaccentsmall","Ringsmall","","","",""],lr=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","","Adieresis","Aring","Ccedilla","Eacute","Ntilde","Odieresis","Udieresis","aacute","agrave","acircumflex","adieresis","atilde","aring","ccedilla","eacute","egrave","ecircumflex","edieresis","iacute","igrave","icircumflex","idieresis","ntilde","oacute","ograve","ocircumflex","odieresis","otilde","uacute","ugrave","ucircumflex","udieresis","dagger","degree","cent","sterling","section","bullet","paragraph","germandbls","registered","copyright","trademark","acute","dieresis","notequal","AE","Oslash","infinity","plusminus","lessequal","greaterequal","yen","mu","partialdiff","summation","product","pi","integral","ordfeminine","ordmasculine","Omega","ae","oslash","questiondown","exclamdown","logicalnot","radical","florin","approxequal","Delta","guillemotleft","guillemotright","ellipsis","space","Agrave","Atilde","Otilde","OE","oe","endash","emdash","quotedblleft","quotedblright","quoteleft","quoteright","divide","lozenge","ydieresis","Ydieresis","fraction","currency","guilsinglleft","guilsinglright","fi","fl","daggerdbl","periodcentered","quotesinglbase","quotedblbase","perthousand","Acircumflex","Ecircumflex","Aacute","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Oacute","Ocircumflex","apple","Ograve","Uacute","Ucircumflex","Ugrave","dotlessi","circumflex","tilde","macron","breve","dotaccent","ring","cedilla","hungarumlaut","ogonek","caron"],hr=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","","endash","dagger","daggerdbl","periodcentered","","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","","questiondown","","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","","ring","cedilla","","hungarumlaut","ogonek","caron","emdash","","","","","","","","","","","","","","","","","AE","","ordfeminine","","","","","Lslash","Oslash","OE","ordmasculine","","","","","","ae","","","","dotlessi","","","lslash","oslash","oe","germandbls","","","",""],ur=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","bullet","Euro","bullet","quotesinglbase","florin","quotedblbase","ellipsis","dagger","daggerdbl","circumflex","perthousand","Scaron","guilsinglleft","OE","bullet","Zcaron","bullet","bullet","quoteleft","quoteright","quotedblleft","quotedblright","bullet","endash","emdash","tilde","trademark","scaron","guilsinglright","oe","bullet","zcaron","Ydieresis","space","exclamdown","cent","sterling","currency","yen","brokenbar","section","dieresis","copyright","ordfeminine","guillemotleft","logicalnot","hyphen","registered","macron","degree","plusminus","twosuperior","threesuperior","acute","mu","paragraph","periodcentered","cedilla","onesuperior","ordmasculine","guillemotright","onequarter","onehalf","threequarters","questiondown","Agrave","Aacute","Acircumflex","Atilde","Adieresis","Aring","AE","Ccedilla","Egrave","Eacute","Ecircumflex","Edieresis","Igrave","Iacute","Icircumflex","Idieresis","Eth","Ntilde","Ograve","Oacute","Ocircumflex","Otilde","Odieresis","multiply","Oslash","Ugrave","Uacute","Ucircumflex","Udieresis","Yacute","Thorn","germandbls","agrave","aacute","acircumflex","atilde","adieresis","aring","ae","ccedilla","egrave","eacute","ecircumflex","edieresis","igrave","iacute","icircumflex","idieresis","eth","ntilde","ograve","oacute","ocircumflex","otilde","odieresis","divide","oslash","ugrave","uacute","ucircumflex","udieresis","yacute","thorn","ydieresis"],dr=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","universal","numbersign","existential","percent","ampersand","suchthat","parenleft","parenright","asteriskmath","plus","comma","minus","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","congruent","Alpha","Beta","Chi","Delta","Epsilon","Phi","Gamma","Eta","Iota","theta1","Kappa","Lambda","Mu","Nu","Omicron","Pi","Theta","Rho","Sigma","Tau","Upsilon","sigma1","Omega","Xi","Psi","Zeta","bracketleft","therefore","bracketright","perpendicular","underscore","radicalex","alpha","beta","chi","delta","epsilon","phi","gamma","eta","iota","phi1","kappa","lambda","mu","nu","omicron","pi","theta","rho","sigma","tau","upsilon","omega1","omega","xi","psi","zeta","braceleft","bar","braceright","similar","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Euro","Upsilon1","minute","lessequal","fraction","infinity","florin","club","diamond","heart","spade","arrowboth","arrowleft","arrowup","arrowright","arrowdown","degree","plusminus","second","greaterequal","multiply","proportional","partialdiff","bullet","divide","notequal","equivalence","approxequal","ellipsis","arrowvertex","arrowhorizex","carriagereturn","aleph","Ifraktur","Rfraktur","weierstrass","circlemultiply","circleplus","emptyset","intersection","union","propersuperset","reflexsuperset","notsubset","propersubset","reflexsubset","element","notelement","angle","gradient","registerserif","copyrightserif","trademarkserif","product","radical","dotmath","logicalnot","logicaland","logicalor","arrowdblboth","arrowdblleft","arrowdblup","arrowdblright","arrowdbldown","lozenge","angleleft","registersans","copyrightsans","trademarksans","summation","parenlefttp","parenleftex","parenleftbt","bracketlefttp","bracketleftex","bracketleftbt","bracelefttp","braceleftmid","braceleftbt","braceex","","angleright","integral","integraltp","integralex","integralbt","parenrighttp","parenrightex","parenrightbt","bracketrighttp","bracketrightex","bracketrightbt","bracerighttp","bracerightmid","bracerightbt",""],fr=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","a1","a2","a202","a3","a4","a5","a119","a118","a117","a11","a12","a13","a14","a15","a16","a105","a17","a18","a19","a20","a21","a22","a23","a24","a25","a26","a27","a28","a6","a7","a8","a9","a10","a29","a30","a31","a32","a33","a34","a35","a36","a37","a38","a39","a40","a41","a42","a43","a44","a45","a46","a47","a48","a49","a50","a51","a52","a53","a54","a55","a56","a57","a58","a59","a60","a61","a62","a63","a64","a65","a66","a67","a68","a69","a70","a71","a72","a73","a74","a203","a75","a204","a76","a77","a78","a79","a81","a82","a83","a84","a97","a98","a99","a100","","a89","a90","a93","a94","a91","a92","a205","a85","a206","a86","a87","a88","a95","a96","","","","","","","","","","","","","","","","","","","","a101","a102","a103","a104","a106","a107","a108","a112","a111","a110","a109","a120","a121","a122","a123","a124","a125","a126","a127","a128","a129","a130","a131","a132","a133","a134","a135","a136","a137","a138","a139","a140","a141","a142","a143","a144","a145","a146","a147","a148","a149","a150","a151","a152","a153","a154","a155","a156","a157","a158","a159","a160","a161","a163","a164","a196","a165","a192","a166","a167","a168","a169","a170","a171","a172","a173","a162","a174","a175","a176","a177","a178","a179","a193","a180","a199","a181","a200","a182","","a201","a183","a184","a197","a185","a194","a198","a186","a195","a187","a188","a189","a190","a191",""];function getEncoding(e){switch(e){case"WinAnsiEncoding":return ur;case"StandardEncoding":return hr;case"MacRomanEncoding":return lr;case"SymbolSetEncoding":return dr;case"ZapfDingbatsEncoding":return fr;case"ExpertEncoding":return or;case"MacExpertEncoding":return cr;default:return null}}const gr=getLookupTableFactory(function(e){e.A=65;e.AE=198;e.AEacute=508;e.AEmacron=482;e.AEsmall=63462;e.Aacute=193;e.Aacutesmall=63457;e.Abreve=258;e.Abreveacute=7854;e.Abrevecyrillic=1232;e.Abrevedotbelow=7862;e.Abrevegrave=7856;e.Abrevehookabove=7858;e.Abrevetilde=7860;e.Acaron=461;e.Acircle=9398;e.Acircumflex=194;e.Acircumflexacute=7844;e.Acircumflexdotbelow=7852;e.Acircumflexgrave=7846;e.Acircumflexhookabove=7848;e.Acircumflexsmall=63458;e.Acircumflextilde=7850;e.Acute=63177;e.Acutesmall=63412;e.Acyrillic=1040;e.Adblgrave=512;e.Adieresis=196;e.Adieresiscyrillic=1234;e.Adieresismacron=478;e.Adieresissmall=63460;e.Adotbelow=7840;e.Adotmacron=480;e.Agrave=192;e.Agravesmall=63456;e.Ahookabove=7842;e.Aiecyrillic=1236;e.Ainvertedbreve=514;e.Alpha=913;e.Alphatonos=902;e.Amacron=256;e.Amonospace=65313;e.Aogonek=260;e.Aring=197;e.Aringacute=506;e.Aringbelow=7680;e.Aringsmall=63461;e.Asmall=63329;e.Atilde=195;e.Atildesmall=63459;e.Aybarmenian=1329;e.B=66;e.Bcircle=9399;e.Bdotaccent=7682;e.Bdotbelow=7684;e.Becyrillic=1041;e.Benarmenian=1330;e.Beta=914;e.Bhook=385;e.Blinebelow=7686;e.Bmonospace=65314;e.Brevesmall=63220;e.Bsmall=63330;e.Btopbar=386;e.C=67;e.Caarmenian=1342;e.Cacute=262;e.Caron=63178;e.Caronsmall=63221;e.Ccaron=268;e.Ccedilla=199;e.Ccedillaacute=7688;e.Ccedillasmall=63463;e.Ccircle=9400;e.Ccircumflex=264;e.Cdot=266;e.Cdotaccent=266;e.Cedillasmall=63416;e.Chaarmenian=1353;e.Cheabkhasiancyrillic=1212;e.Checyrillic=1063;e.Chedescenderabkhasiancyrillic=1214;e.Chedescendercyrillic=1206;e.Chedieresiscyrillic=1268;e.Cheharmenian=1347;e.Chekhakassiancyrillic=1227;e.Cheverticalstrokecyrillic=1208;e.Chi=935;e.Chook=391;e.Circumflexsmall=63222;e.Cmonospace=65315;e.Coarmenian=1361;e.Csmall=63331;e.D=68;e.DZ=497;e.DZcaron=452;e.Daarmenian=1332;e.Dafrican=393;e.Dcaron=270;e.Dcedilla=7696;e.Dcircle=9401;e.Dcircumflexbelow=7698;e.Dcroat=272;e.Ddotaccent=7690;e.Ddotbelow=7692;e.Decyrillic=1044;e.Deicoptic=1006;e.Delta=8710;e.Deltagreek=916;e.Dhook=394;e.Dieresis=63179;e.DieresisAcute=63180;e.DieresisGrave=63181;e.Dieresissmall=63400;e.Digammagreek=988;e.Djecyrillic=1026;e.Dlinebelow=7694;e.Dmonospace=65316;e.Dotaccentsmall=63223;e.Dslash=272;e.Dsmall=63332;e.Dtopbar=395;e.Dz=498;e.Dzcaron=453;e.Dzeabkhasiancyrillic=1248;e.Dzecyrillic=1029;e.Dzhecyrillic=1039;e.E=69;e.Eacute=201;e.Eacutesmall=63465;e.Ebreve=276;e.Ecaron=282;e.Ecedillabreve=7708;e.Echarmenian=1333;e.Ecircle=9402;e.Ecircumflex=202;e.Ecircumflexacute=7870;e.Ecircumflexbelow=7704;e.Ecircumflexdotbelow=7878;e.Ecircumflexgrave=7872;e.Ecircumflexhookabove=7874;e.Ecircumflexsmall=63466;e.Ecircumflextilde=7876;e.Ecyrillic=1028;e.Edblgrave=516;e.Edieresis=203;e.Edieresissmall=63467;e.Edot=278;e.Edotaccent=278;e.Edotbelow=7864;e.Efcyrillic=1060;e.Egrave=200;e.Egravesmall=63464;e.Eharmenian=1335;e.Ehookabove=7866;e.Eightroman=8551;e.Einvertedbreve=518;e.Eiotifiedcyrillic=1124;e.Elcyrillic=1051;e.Elevenroman=8554;e.Emacron=274;e.Emacronacute=7702;e.Emacrongrave=7700;e.Emcyrillic=1052;e.Emonospace=65317;e.Encyrillic=1053;e.Endescendercyrillic=1186;e.Eng=330;e.Enghecyrillic=1188;e.Enhookcyrillic=1223;e.Eogonek=280;e.Eopen=400;e.Epsilon=917;e.Epsilontonos=904;e.Ercyrillic=1056;e.Ereversed=398;e.Ereversedcyrillic=1069;e.Escyrillic=1057;e.Esdescendercyrillic=1194;e.Esh=425;e.Esmall=63333;e.Eta=919;e.Etarmenian=1336;e.Etatonos=905;e.Eth=208;e.Ethsmall=63472;e.Etilde=7868;e.Etildebelow=7706;e.Euro=8364;e.Ezh=439;e.Ezhcaron=494;e.Ezhreversed=440;e.F=70;e.Fcircle=9403;e.Fdotaccent=7710;e.Feharmenian=1366;e.Feicoptic=996;e.Fhook=401;e.Fitacyrillic=1138;e.Fiveroman=8548;e.Fmonospace=65318;e.Fourroman=8547;e.Fsmall=63334;e.G=71;e.GBsquare=13191;e.Gacute=500;e.Gamma=915;e.Gammaafrican=404;e.Gangiacoptic=1002;e.Gbreve=286;e.Gcaron=486;e.Gcedilla=290;e.Gcircle=9404;e.Gcircumflex=284;e.Gcommaaccent=290;e.Gdot=288;e.Gdotaccent=288;e.Gecyrillic=1043;e.Ghadarmenian=1346;e.Ghemiddlehookcyrillic=1172;e.Ghestrokecyrillic=1170;e.Gheupturncyrillic=1168;e.Ghook=403;e.Gimarmenian=1331;e.Gjecyrillic=1027;e.Gmacron=7712;e.Gmonospace=65319;e.Grave=63182;e.Gravesmall=63328;e.Gsmall=63335;e.Gsmallhook=667;e.Gstroke=484;e.H=72;e.H18533=9679;e.H18543=9642;e.H18551=9643;e.H22073=9633;e.HPsquare=13259;e.Haabkhasiancyrillic=1192;e.Hadescendercyrillic=1202;e.Hardsigncyrillic=1066;e.Hbar=294;e.Hbrevebelow=7722;e.Hcedilla=7720;e.Hcircle=9405;e.Hcircumflex=292;e.Hdieresis=7718;e.Hdotaccent=7714;e.Hdotbelow=7716;e.Hmonospace=65320;e.Hoarmenian=1344;e.Horicoptic=1e3;e.Hsmall=63336;e.Hungarumlaut=63183;e.Hungarumlautsmall=63224;e.Hzsquare=13200;e.I=73;e.IAcyrillic=1071;e.IJ=306;e.IUcyrillic=1070;e.Iacute=205;e.Iacutesmall=63469;e.Ibreve=300;e.Icaron=463;e.Icircle=9406;e.Icircumflex=206;e.Icircumflexsmall=63470;e.Icyrillic=1030;e.Idblgrave=520;e.Idieresis=207;e.Idieresisacute=7726;e.Idieresiscyrillic=1252;e.Idieresissmall=63471;e.Idot=304;e.Idotaccent=304;e.Idotbelow=7882;e.Iebrevecyrillic=1238;e.Iecyrillic=1045;e.Ifraktur=8465;e.Igrave=204;e.Igravesmall=63468;e.Ihookabove=7880;e.Iicyrillic=1048;e.Iinvertedbreve=522;e.Iishortcyrillic=1049;e.Imacron=298;e.Imacroncyrillic=1250;e.Imonospace=65321;e.Iniarmenian=1339;e.Iocyrillic=1025;e.Iogonek=302;e.Iota=921;e.Iotaafrican=406;e.Iotadieresis=938;e.Iotatonos=906;e.Ismall=63337;e.Istroke=407;e.Itilde=296;e.Itildebelow=7724;e.Izhitsacyrillic=1140;e.Izhitsadblgravecyrillic=1142;e.J=74;e.Jaarmenian=1345;e.Jcircle=9407;e.Jcircumflex=308;e.Jecyrillic=1032;e.Jheharmenian=1355;e.Jmonospace=65322;e.Jsmall=63338;e.K=75;e.KBsquare=13189;e.KKsquare=13261;e.Kabashkircyrillic=1184;e.Kacute=7728;e.Kacyrillic=1050;e.Kadescendercyrillic=1178;e.Kahookcyrillic=1219;e.Kappa=922;e.Kastrokecyrillic=1182;e.Kaverticalstrokecyrillic=1180;e.Kcaron=488;e.Kcedilla=310;e.Kcircle=9408;e.Kcommaaccent=310;e.Kdotbelow=7730;e.Keharmenian=1364;e.Kenarmenian=1343;e.Khacyrillic=1061;e.Kheicoptic=998;e.Khook=408;e.Kjecyrillic=1036;e.Klinebelow=7732;e.Kmonospace=65323;e.Koppacyrillic=1152;e.Koppagreek=990;e.Ksicyrillic=1134;e.Ksmall=63339;e.L=76;e.LJ=455;e.LL=63167;e.Lacute=313;e.Lambda=923;e.Lcaron=317;e.Lcedilla=315;e.Lcircle=9409;e.Lcircumflexbelow=7740;e.Lcommaaccent=315;e.Ldot=319;e.Ldotaccent=319;e.Ldotbelow=7734;e.Ldotbelowmacron=7736;e.Liwnarmenian=1340;e.Lj=456;e.Ljecyrillic=1033;e.Llinebelow=7738;e.Lmonospace=65324;e.Lslash=321;e.Lslashsmall=63225;e.Lsmall=63340;e.M=77;e.MBsquare=13190;e.Macron=63184;e.Macronsmall=63407;e.Macute=7742;e.Mcircle=9410;e.Mdotaccent=7744;e.Mdotbelow=7746;e.Menarmenian=1348;e.Mmonospace=65325;e.Msmall=63341;e.Mturned=412;e.Mu=924;e.N=78;e.NJ=458;e.Nacute=323;e.Ncaron=327;e.Ncedilla=325;e.Ncircle=9411;e.Ncircumflexbelow=7754;e.Ncommaaccent=325;e.Ndotaccent=7748;e.Ndotbelow=7750;e.Nhookleft=413;e.Nineroman=8552;e.Nj=459;e.Njecyrillic=1034;e.Nlinebelow=7752;e.Nmonospace=65326;e.Nowarmenian=1350;e.Nsmall=63342;e.Ntilde=209;e.Ntildesmall=63473;e.Nu=925;e.O=79;e.OE=338;e.OEsmall=63226;e.Oacute=211;e.Oacutesmall=63475;e.Obarredcyrillic=1256;e.Obarreddieresiscyrillic=1258;e.Obreve=334;e.Ocaron=465;e.Ocenteredtilde=415;e.Ocircle=9412;e.Ocircumflex=212;e.Ocircumflexacute=7888;e.Ocircumflexdotbelow=7896;e.Ocircumflexgrave=7890;e.Ocircumflexhookabove=7892;e.Ocircumflexsmall=63476;e.Ocircumflextilde=7894;e.Ocyrillic=1054;e.Odblacute=336;e.Odblgrave=524;e.Odieresis=214;e.Odieresiscyrillic=1254;e.Odieresissmall=63478;e.Odotbelow=7884;e.Ogoneksmall=63227;e.Ograve=210;e.Ogravesmall=63474;e.Oharmenian=1365;e.Ohm=8486;e.Ohookabove=7886;e.Ohorn=416;e.Ohornacute=7898;e.Ohorndotbelow=7906;e.Ohorngrave=7900;e.Ohornhookabove=7902;e.Ohorntilde=7904;e.Ohungarumlaut=336;e.Oi=418;e.Oinvertedbreve=526;e.Omacron=332;e.Omacronacute=7762;e.Omacrongrave=7760;e.Omega=8486;e.Omegacyrillic=1120;e.Omegagreek=937;e.Omegaroundcyrillic=1146;e.Omegatitlocyrillic=1148;e.Omegatonos=911;e.Omicron=927;e.Omicrontonos=908;e.Omonospace=65327;e.Oneroman=8544;e.Oogonek=490;e.Oogonekmacron=492;e.Oopen=390;e.Oslash=216;e.Oslashacute=510;e.Oslashsmall=63480;e.Osmall=63343;e.Ostrokeacute=510;e.Otcyrillic=1150;e.Otilde=213;e.Otildeacute=7756;e.Otildedieresis=7758;e.Otildesmall=63477;e.P=80;e.Pacute=7764;e.Pcircle=9413;e.Pdotaccent=7766;e.Pecyrillic=1055;e.Peharmenian=1354;e.Pemiddlehookcyrillic=1190;e.Phi=934;e.Phook=420;e.Pi=928;e.Piwrarmenian=1363;e.Pmonospace=65328;e.Psi=936;e.Psicyrillic=1136;e.Psmall=63344;e.Q=81;e.Qcircle=9414;e.Qmonospace=65329;e.Qsmall=63345;e.R=82;e.Raarmenian=1356;e.Racute=340;e.Rcaron=344;e.Rcedilla=342;e.Rcircle=9415;e.Rcommaaccent=342;e.Rdblgrave=528;e.Rdotaccent=7768;e.Rdotbelow=7770;e.Rdotbelowmacron=7772;e.Reharmenian=1360;e.Rfraktur=8476;e.Rho=929;e.Ringsmall=63228;e.Rinvertedbreve=530;e.Rlinebelow=7774;e.Rmonospace=65330;e.Rsmall=63346;e.Rsmallinverted=641;e.Rsmallinvertedsuperior=694;e.S=83;e.SF010000=9484;e.SF020000=9492;e.SF030000=9488;e.SF040000=9496;e.SF050000=9532;e.SF060000=9516;e.SF070000=9524;e.SF080000=9500;e.SF090000=9508;e.SF100000=9472;e.SF110000=9474;e.SF190000=9569;e.SF200000=9570;e.SF210000=9558;e.SF220000=9557;e.SF230000=9571;e.SF240000=9553;e.SF250000=9559;e.SF260000=9565;e.SF270000=9564;e.SF280000=9563;e.SF360000=9566;e.SF370000=9567;e.SF380000=9562;e.SF390000=9556;e.SF400000=9577;e.SF410000=9574;e.SF420000=9568;e.SF430000=9552;e.SF440000=9580;e.SF450000=9575;e.SF460000=9576;e.SF470000=9572;e.SF480000=9573;e.SF490000=9561;e.SF500000=9560;e.SF510000=9554;e.SF520000=9555;e.SF530000=9579;e.SF540000=9578;e.Sacute=346;e.Sacutedotaccent=7780;e.Sampigreek=992;e.Scaron=352;e.Scarondotaccent=7782;e.Scaronsmall=63229;e.Scedilla=350;e.Schwa=399;e.Schwacyrillic=1240;e.Schwadieresiscyrillic=1242;e.Scircle=9416;e.Scircumflex=348;e.Scommaaccent=536;e.Sdotaccent=7776;e.Sdotbelow=7778;e.Sdotbelowdotaccent=7784;e.Seharmenian=1357;e.Sevenroman=8550;e.Shaarmenian=1351;e.Shacyrillic=1064;e.Shchacyrillic=1065;e.Sheicoptic=994;e.Shhacyrillic=1210;e.Shimacoptic=1004;e.Sigma=931;e.Sixroman=8549;e.Smonospace=65331;e.Softsigncyrillic=1068;e.Ssmall=63347;e.Stigmagreek=986;e.T=84;e.Tau=932;e.Tbar=358;e.Tcaron=356;e.Tcedilla=354;e.Tcircle=9417;e.Tcircumflexbelow=7792;e.Tcommaaccent=354;e.Tdotaccent=7786;e.Tdotbelow=7788;e.Tecyrillic=1058;e.Tedescendercyrillic=1196;e.Tenroman=8553;e.Tetsecyrillic=1204;e.Theta=920;e.Thook=428;e.Thorn=222;e.Thornsmall=63486;e.Threeroman=8546;e.Tildesmall=63230;e.Tiwnarmenian=1359;e.Tlinebelow=7790;e.Tmonospace=65332;e.Toarmenian=1337;e.Tonefive=444;e.Tonesix=388;e.Tonetwo=423;e.Tretroflexhook=430;e.Tsecyrillic=1062;e.Tshecyrillic=1035;e.Tsmall=63348;e.Twelveroman=8555;e.Tworoman=8545;e.U=85;e.Uacute=218;e.Uacutesmall=63482;e.Ubreve=364;e.Ucaron=467;e.Ucircle=9418;e.Ucircumflex=219;e.Ucircumflexbelow=7798;e.Ucircumflexsmall=63483;e.Ucyrillic=1059;e.Udblacute=368;e.Udblgrave=532;e.Udieresis=220;e.Udieresisacute=471;e.Udieresisbelow=7794;e.Udieresiscaron=473;e.Udieresiscyrillic=1264;e.Udieresisgrave=475;e.Udieresismacron=469;e.Udieresissmall=63484;e.Udotbelow=7908;e.Ugrave=217;e.Ugravesmall=63481;e.Uhookabove=7910;e.Uhorn=431;e.Uhornacute=7912;e.Uhorndotbelow=7920;e.Uhorngrave=7914;e.Uhornhookabove=7916;e.Uhorntilde=7918;e.Uhungarumlaut=368;e.Uhungarumlautcyrillic=1266;e.Uinvertedbreve=534;e.Ukcyrillic=1144;e.Umacron=362;e.Umacroncyrillic=1262;e.Umacrondieresis=7802;e.Umonospace=65333;e.Uogonek=370;e.Upsilon=933;e.Upsilon1=978;e.Upsilonacutehooksymbolgreek=979;e.Upsilonafrican=433;e.Upsilondieresis=939;e.Upsilondieresishooksymbolgreek=980;e.Upsilonhooksymbol=978;e.Upsilontonos=910;e.Uring=366;e.Ushortcyrillic=1038;e.Usmall=63349;e.Ustraightcyrillic=1198;e.Ustraightstrokecyrillic=1200;e.Utilde=360;e.Utildeacute=7800;e.Utildebelow=7796;e.V=86;e.Vcircle=9419;e.Vdotbelow=7806;e.Vecyrillic=1042;e.Vewarmenian=1358;e.Vhook=434;e.Vmonospace=65334;e.Voarmenian=1352;e.Vsmall=63350;e.Vtilde=7804;e.W=87;e.Wacute=7810;e.Wcircle=9420;e.Wcircumflex=372;e.Wdieresis=7812;e.Wdotaccent=7814;e.Wdotbelow=7816;e.Wgrave=7808;e.Wmonospace=65335;e.Wsmall=63351;e.X=88;e.Xcircle=9421;e.Xdieresis=7820;e.Xdotaccent=7818;e.Xeharmenian=1341;e.Xi=926;e.Xmonospace=65336;e.Xsmall=63352;e.Y=89;e.Yacute=221;e.Yacutesmall=63485;e.Yatcyrillic=1122;e.Ycircle=9422;e.Ycircumflex=374;e.Ydieresis=376;e.Ydieresissmall=63487;e.Ydotaccent=7822;e.Ydotbelow=7924;e.Yericyrillic=1067;e.Yerudieresiscyrillic=1272;e.Ygrave=7922;e.Yhook=435;e.Yhookabove=7926;e.Yiarmenian=1349;e.Yicyrillic=1031;e.Yiwnarmenian=1362;e.Ymonospace=65337;e.Ysmall=63353;e.Ytilde=7928;e.Yusbigcyrillic=1130;e.Yusbigiotifiedcyrillic=1132;e.Yuslittlecyrillic=1126;e.Yuslittleiotifiedcyrillic=1128;e.Z=90;e.Zaarmenian=1334;e.Zacute=377;e.Zcaron=381;e.Zcaronsmall=63231;e.Zcircle=9423;e.Zcircumflex=7824;e.Zdot=379;e.Zdotaccent=379;e.Zdotbelow=7826;e.Zecyrillic=1047;e.Zedescendercyrillic=1176;e.Zedieresiscyrillic=1246;e.Zeta=918;e.Zhearmenian=1338;e.Zhebrevecyrillic=1217;e.Zhecyrillic=1046;e.Zhedescendercyrillic=1174;e.Zhedieresiscyrillic=1244;e.Zlinebelow=7828;e.Zmonospace=65338;e.Zsmall=63354;e.Zstroke=437;e.a=97;e.aabengali=2438;e.aacute=225;e.aadeva=2310;e.aagujarati=2694;e.aagurmukhi=2566;e.aamatragurmukhi=2622;e.aarusquare=13059;e.aavowelsignbengali=2494;e.aavowelsigndeva=2366;e.aavowelsigngujarati=2750;e.abbreviationmarkarmenian=1375;e.abbreviationsigndeva=2416;e.abengali=2437;e.abopomofo=12570;e.abreve=259;e.abreveacute=7855;e.abrevecyrillic=1233;e.abrevedotbelow=7863;e.abrevegrave=7857;e.abrevehookabove=7859;e.abrevetilde=7861;e.acaron=462;e.acircle=9424;e.acircumflex=226;e.acircumflexacute=7845;e.acircumflexdotbelow=7853;e.acircumflexgrave=7847;e.acircumflexhookabove=7849;e.acircumflextilde=7851;e.acute=180;e.acutebelowcmb=791;e.acutecmb=769;e.acutecomb=769;e.acutedeva=2388;e.acutelowmod=719;e.acutetonecmb=833;e.acyrillic=1072;e.adblgrave=513;e.addakgurmukhi=2673;e.adeva=2309;e.adieresis=228;e.adieresiscyrillic=1235;e.adieresismacron=479;e.adotbelow=7841;e.adotmacron=481;e.ae=230;e.aeacute=509;e.aekorean=12624;e.aemacron=483;e.afii00208=8213;e.afii08941=8356;e.afii10017=1040;e.afii10018=1041;e.afii10019=1042;e.afii10020=1043;e.afii10021=1044;e.afii10022=1045;e.afii10023=1025;e.afii10024=1046;e.afii10025=1047;e.afii10026=1048;e.afii10027=1049;e.afii10028=1050;e.afii10029=1051;e.afii10030=1052;e.afii10031=1053;e.afii10032=1054;e.afii10033=1055;e.afii10034=1056;e.afii10035=1057;e.afii10036=1058;e.afii10037=1059;e.afii10038=1060;e.afii10039=1061;e.afii10040=1062;e.afii10041=1063;e.afii10042=1064;e.afii10043=1065;e.afii10044=1066;e.afii10045=1067;e.afii10046=1068;e.afii10047=1069;e.afii10048=1070;e.afii10049=1071;e.afii10050=1168;e.afii10051=1026;e.afii10052=1027;e.afii10053=1028;e.afii10054=1029;e.afii10055=1030;e.afii10056=1031;e.afii10057=1032;e.afii10058=1033;e.afii10059=1034;e.afii10060=1035;e.afii10061=1036;e.afii10062=1038;e.afii10063=63172;e.afii10064=63173;e.afii10065=1072;e.afii10066=1073;e.afii10067=1074;e.afii10068=1075;e.afii10069=1076;e.afii10070=1077;e.afii10071=1105;e.afii10072=1078;e.afii10073=1079;e.afii10074=1080;e.afii10075=1081;e.afii10076=1082;e.afii10077=1083;e.afii10078=1084;e.afii10079=1085;e.afii10080=1086;e.afii10081=1087;e.afii10082=1088;e.afii10083=1089;e.afii10084=1090;e.afii10085=1091;e.afii10086=1092;e.afii10087=1093;e.afii10088=1094;e.afii10089=1095;e.afii10090=1096;e.afii10091=1097;e.afii10092=1098;e.afii10093=1099;e.afii10094=1100;e.afii10095=1101;e.afii10096=1102;e.afii10097=1103;e.afii10098=1169;e.afii10099=1106;e.afii10100=1107;e.afii10101=1108;e.afii10102=1109;e.afii10103=1110;e.afii10104=1111;e.afii10105=1112;e.afii10106=1113;e.afii10107=1114;e.afii10108=1115;e.afii10109=1116;e.afii10110=1118;e.afii10145=1039;e.afii10146=1122;e.afii10147=1138;e.afii10148=1140;e.afii10192=63174;e.afii10193=1119;e.afii10194=1123;e.afii10195=1139;e.afii10196=1141;e.afii10831=63175;e.afii10832=63176;e.afii10846=1241;e.afii299=8206;e.afii300=8207;e.afii301=8205;e.afii57381=1642;e.afii57388=1548;e.afii57392=1632;e.afii57393=1633;e.afii57394=1634;e.afii57395=1635;e.afii57396=1636;e.afii57397=1637;e.afii57398=1638;e.afii57399=1639;e.afii57400=1640;e.afii57401=1641;e.afii57403=1563;e.afii57407=1567;e.afii57409=1569;e.afii57410=1570;e.afii57411=1571;e.afii57412=1572;e.afii57413=1573;e.afii57414=1574;e.afii57415=1575;e.afii57416=1576;e.afii57417=1577;e.afii57418=1578;e.afii57419=1579;e.afii57420=1580;e.afii57421=1581;e.afii57422=1582;e.afii57423=1583;e.afii57424=1584;e.afii57425=1585;e.afii57426=1586;e.afii57427=1587;e.afii57428=1588;e.afii57429=1589;e.afii57430=1590;e.afii57431=1591;e.afii57432=1592;e.afii57433=1593;e.afii57434=1594;e.afii57440=1600;e.afii57441=1601;e.afii57442=1602;e.afii57443=1603;e.afii57444=1604;e.afii57445=1605;e.afii57446=1606;e.afii57448=1608;e.afii57449=1609;e.afii57450=1610;e.afii57451=1611;e.afii57452=1612;e.afii57453=1613;e.afii57454=1614;e.afii57455=1615;e.afii57456=1616;e.afii57457=1617;e.afii57458=1618;e.afii57470=1607;e.afii57505=1700;e.afii57506=1662;e.afii57507=1670;e.afii57508=1688;e.afii57509=1711;e.afii57511=1657;e.afii57512=1672;e.afii57513=1681;e.afii57514=1722;e.afii57519=1746;e.afii57534=1749;e.afii57636=8362;e.afii57645=1470;e.afii57658=1475;e.afii57664=1488;e.afii57665=1489;e.afii57666=1490;e.afii57667=1491;e.afii57668=1492;e.afii57669=1493;e.afii57670=1494;e.afii57671=1495;e.afii57672=1496;e.afii57673=1497;e.afii57674=1498;e.afii57675=1499;e.afii57676=1500;e.afii57677=1501;e.afii57678=1502;e.afii57679=1503;e.afii57680=1504;e.afii57681=1505;e.afii57682=1506;e.afii57683=1507;e.afii57684=1508;e.afii57685=1509;e.afii57686=1510;e.afii57687=1511;e.afii57688=1512;e.afii57689=1513;e.afii57690=1514;e.afii57694=64298;e.afii57695=64299;e.afii57700=64331;e.afii57705=64287;e.afii57716=1520;e.afii57717=1521;e.afii57718=1522;e.afii57723=64309;e.afii57793=1460;e.afii57794=1461;e.afii57795=1462;e.afii57796=1467;e.afii57797=1464;e.afii57798=1463;e.afii57799=1456;e.afii57800=1458;e.afii57801=1457;e.afii57802=1459;e.afii57803=1474;e.afii57804=1473;e.afii57806=1465;e.afii57807=1468;e.afii57839=1469;e.afii57841=1471;e.afii57842=1472;e.afii57929=700;e.afii61248=8453;e.afii61289=8467;e.afii61352=8470;e.afii61573=8236;e.afii61574=8237;e.afii61575=8238;e.afii61664=8204;e.afii63167=1645;e.afii64937=701;e.agrave=224;e.agujarati=2693;e.agurmukhi=2565;e.ahiragana=12354;e.ahookabove=7843;e.aibengali=2448;e.aibopomofo=12574;e.aideva=2320;e.aiecyrillic=1237;e.aigujarati=2704;e.aigurmukhi=2576;e.aimatragurmukhi=2632;e.ainarabic=1593;e.ainfinalarabic=65226;e.aininitialarabic=65227;e.ainmedialarabic=65228;e.ainvertedbreve=515;e.aivowelsignbengali=2504;e.aivowelsigndeva=2376;e.aivowelsigngujarati=2760;e.akatakana=12450;e.akatakanahalfwidth=65393;e.akorean=12623;e.alef=1488;e.alefarabic=1575;e.alefdageshhebrew=64304;e.aleffinalarabic=65166;e.alefhamzaabovearabic=1571;e.alefhamzaabovefinalarabic=65156;e.alefhamzabelowarabic=1573;e.alefhamzabelowfinalarabic=65160;e.alefhebrew=1488;e.aleflamedhebrew=64335;e.alefmaddaabovearabic=1570;e.alefmaddaabovefinalarabic=65154;e.alefmaksuraarabic=1609;e.alefmaksurafinalarabic=65264;e.alefmaksurainitialarabic=65267;e.alefmaksuramedialarabic=65268;e.alefpatahhebrew=64302;e.alefqamatshebrew=64303;e.aleph=8501;e.allequal=8780;e.alpha=945;e.alphatonos=940;e.amacron=257;e.amonospace=65345;e.ampersand=38;e.ampersandmonospace=65286;e.ampersandsmall=63270;e.amsquare=13250;e.anbopomofo=12578;e.angbopomofo=12580;e.angbracketleft=12296;e.angbracketright=12297;e.angkhankhuthai=3674;e.angle=8736;e.anglebracketleft=12296;e.anglebracketleftvertical=65087;e.anglebracketright=12297;e.anglebracketrightvertical=65088;e.angleleft=9001;e.angleright=9002;e.angstrom=8491;e.anoteleia=903;e.anudattadeva=2386;e.anusvarabengali=2434;e.anusvaradeva=2306;e.anusvaragujarati=2690;e.aogonek=261;e.apaatosquare=13056;e.aparen=9372;e.apostrophearmenian=1370;e.apostrophemod=700;e.apple=63743;e.approaches=8784;e.approxequal=8776;e.approxequalorimage=8786;e.approximatelyequal=8773;e.araeaekorean=12686;e.araeakorean=12685;e.arc=8978;e.arighthalfring=7834;e.aring=229;e.aringacute=507;e.aringbelow=7681;e.arrowboth=8596;e.arrowdashdown=8675;e.arrowdashleft=8672;e.arrowdashright=8674;e.arrowdashup=8673;e.arrowdblboth=8660;e.arrowdbldown=8659;e.arrowdblleft=8656;e.arrowdblright=8658;e.arrowdblup=8657;e.arrowdown=8595;e.arrowdownleft=8601;e.arrowdownright=8600;e.arrowdownwhite=8681;e.arrowheaddownmod=709;e.arrowheadleftmod=706;e.arrowheadrightmod=707;e.arrowheadupmod=708;e.arrowhorizex=63719;e.arrowleft=8592;e.arrowleftdbl=8656;e.arrowleftdblstroke=8653;e.arrowleftoverright=8646;e.arrowleftwhite=8678;e.arrowright=8594;e.arrowrightdblstroke=8655;e.arrowrightheavy=10142;e.arrowrightoverleft=8644;e.arrowrightwhite=8680;e.arrowtableft=8676;e.arrowtabright=8677;e.arrowup=8593;e.arrowupdn=8597;e.arrowupdnbse=8616;e.arrowupdownbase=8616;e.arrowupleft=8598;e.arrowupleftofdown=8645;e.arrowupright=8599;e.arrowupwhite=8679;e.arrowvertex=63718;e.asciicircum=94;e.asciicircummonospace=65342;e.asciitilde=126;e.asciitildemonospace=65374;e.ascript=593;e.ascriptturned=594;e.asmallhiragana=12353;e.asmallkatakana=12449;e.asmallkatakanahalfwidth=65383;e.asterisk=42;e.asteriskaltonearabic=1645;e.asteriskarabic=1645;e.asteriskmath=8727;e.asteriskmonospace=65290;e.asterisksmall=65121;e.asterism=8258;e.asuperior=63209;e.asymptoticallyequal=8771;e.at=64;e.atilde=227;e.atmonospace=65312;e.atsmall=65131;e.aturned=592;e.aubengali=2452;e.aubopomofo=12576;e.audeva=2324;e.augujarati=2708;e.augurmukhi=2580;e.aulengthmarkbengali=2519;e.aumatragurmukhi=2636;e.auvowelsignbengali=2508;e.auvowelsigndeva=2380;e.auvowelsigngujarati=2764;e.avagrahadeva=2365;e.aybarmenian=1377;e.ayin=1506;e.ayinaltonehebrew=64288;e.ayinhebrew=1506;e.b=98;e.babengali=2476;e.backslash=92;e.backslashmonospace=65340;e.badeva=2348;e.bagujarati=2732;e.bagurmukhi=2604;e.bahiragana=12400;e.bahtthai=3647;e.bakatakana=12496;e.bar=124;e.barmonospace=65372;e.bbopomofo=12549;e.bcircle=9425;e.bdotaccent=7683;e.bdotbelow=7685;e.beamedsixteenthnotes=9836;e.because=8757;e.becyrillic=1073;e.beharabic=1576;e.behfinalarabic=65168;e.behinitialarabic=65169;e.behiragana=12409;e.behmedialarabic=65170;e.behmeeminitialarabic=64671;e.behmeemisolatedarabic=64520;e.behnoonfinalarabic=64621;e.bekatakana=12505;e.benarmenian=1378;e.bet=1489;e.beta=946;e.betasymbolgreek=976;e.betdagesh=64305;e.betdageshhebrew=64305;e.bethebrew=1489;e.betrafehebrew=64332;e.bhabengali=2477;e.bhadeva=2349;e.bhagujarati=2733;e.bhagurmukhi=2605;e.bhook=595;e.bihiragana=12403;e.bikatakana=12499;e.bilabialclick=664;e.bindigurmukhi=2562;e.birusquare=13105;e.blackcircle=9679;e.blackdiamond=9670;e.blackdownpointingtriangle=9660;e.blackleftpointingpointer=9668;e.blackleftpointingtriangle=9664;e.blacklenticularbracketleft=12304;e.blacklenticularbracketleftvertical=65083;e.blacklenticularbracketright=12305;e.blacklenticularbracketrightvertical=65084;e.blacklowerlefttriangle=9699;e.blacklowerrighttriangle=9698;e.blackrectangle=9644;e.blackrightpointingpointer=9658;e.blackrightpointingtriangle=9654;e.blacksmallsquare=9642;e.blacksmilingface=9787;e.blacksquare=9632;e.blackstar=9733;e.blackupperlefttriangle=9700;e.blackupperrighttriangle=9701;e.blackuppointingsmalltriangle=9652;e.blackuppointingtriangle=9650;e.blank=9251;e.blinebelow=7687;e.block=9608;e.bmonospace=65346;e.bobaimaithai=3610;e.bohiragana=12412;e.bokatakana=12508;e.bparen=9373;e.bqsquare=13251;e.braceex=63732;e.braceleft=123;e.braceleftbt=63731;e.braceleftmid=63730;e.braceleftmonospace=65371;e.braceleftsmall=65115;e.bracelefttp=63729;e.braceleftvertical=65079;e.braceright=125;e.bracerightbt=63742;e.bracerightmid=63741;e.bracerightmonospace=65373;e.bracerightsmall=65116;e.bracerighttp=63740;e.bracerightvertical=65080;e.bracketleft=91;e.bracketleftbt=63728;e.bracketleftex=63727;e.bracketleftmonospace=65339;e.bracketlefttp=63726;e.bracketright=93;e.bracketrightbt=63739;e.bracketrightex=63738;e.bracketrightmonospace=65341;e.bracketrighttp=63737;e.breve=728;e.brevebelowcmb=814;e.brevecmb=774;e.breveinvertedbelowcmb=815;e.breveinvertedcmb=785;e.breveinverteddoublecmb=865;e.bridgebelowcmb=810;e.bridgeinvertedbelowcmb=826;e.brokenbar=166;e.bstroke=384;e.bsuperior=63210;e.btopbar=387;e.buhiragana=12406;e.bukatakana=12502;e.bullet=8226;e.bulletinverse=9688;e.bulletoperator=8729;e.bullseye=9678;e.c=99;e.caarmenian=1390;e.cabengali=2458;e.cacute=263;e.cadeva=2330;e.cagujarati=2714;e.cagurmukhi=2586;e.calsquare=13192;e.candrabindubengali=2433;e.candrabinducmb=784;e.candrabindudeva=2305;e.candrabindugujarati=2689;e.capslock=8682;e.careof=8453;e.caron=711;e.caronbelowcmb=812;e.caroncmb=780;e.carriagereturn=8629;e.cbopomofo=12568;e.ccaron=269;e.ccedilla=231;e.ccedillaacute=7689;e.ccircle=9426;e.ccircumflex=265;e.ccurl=597;e.cdot=267;e.cdotaccent=267;e.cdsquare=13253;e.cedilla=184;e.cedillacmb=807;e.cent=162;e.centigrade=8451;e.centinferior=63199;e.centmonospace=65504;e.centoldstyle=63394;e.centsuperior=63200;e.chaarmenian=1401;e.chabengali=2459;e.chadeva=2331;e.chagujarati=2715;e.chagurmukhi=2587;e.chbopomofo=12564;e.cheabkhasiancyrillic=1213;e.checkmark=10003;e.checyrillic=1095;e.chedescenderabkhasiancyrillic=1215;e.chedescendercyrillic=1207;e.chedieresiscyrillic=1269;e.cheharmenian=1395;e.chekhakassiancyrillic=1228;e.cheverticalstrokecyrillic=1209;e.chi=967;e.chieuchacirclekorean=12919;e.chieuchaparenkorean=12823;e.chieuchcirclekorean=12905;e.chieuchkorean=12618;e.chieuchparenkorean=12809;e.chochangthai=3594;e.chochanthai=3592;e.chochingthai=3593;e.chochoethai=3596;e.chook=392;e.cieucacirclekorean=12918;e.cieucaparenkorean=12822;e.cieuccirclekorean=12904;e.cieuckorean=12616;e.cieucparenkorean=12808;e.cieucuparenkorean=12828;e.circle=9675;e.circlecopyrt=169;e.circlemultiply=8855;e.circleot=8857;e.circleplus=8853;e.circlepostalmark=12342;e.circlewithlefthalfblack=9680;e.circlewithrighthalfblack=9681;e.circumflex=710;e.circumflexbelowcmb=813;e.circumflexcmb=770;e.clear=8999;e.clickalveolar=450;e.clickdental=448;e.clicklateral=449;e.clickretroflex=451;e.club=9827;e.clubsuitblack=9827;e.clubsuitwhite=9831;e.cmcubedsquare=13220;e.cmonospace=65347;e.cmsquaredsquare=13216;e.coarmenian=1409;e.colon=58;e.colonmonetary=8353;e.colonmonospace=65306;e.colonsign=8353;e.colonsmall=65109;e.colontriangularhalfmod=721;e.colontriangularmod=720;e.comma=44;e.commaabovecmb=787;e.commaaboverightcmb=789;e.commaaccent=63171;e.commaarabic=1548;e.commaarmenian=1373;e.commainferior=63201;e.commamonospace=65292;e.commareversedabovecmb=788;e.commareversedmod=701;e.commasmall=65104;e.commasuperior=63202;e.commaturnedabovecmb=786;e.commaturnedmod=699;e.compass=9788;e.congruent=8773;e.contourintegral=8750;e.control=8963;e.controlACK=6;e.controlBEL=7;e.controlBS=8;e.controlCAN=24;e.controlCR=13;e.controlDC1=17;e.controlDC2=18;e.controlDC3=19;e.controlDC4=20;e.controlDEL=127;e.controlDLE=16;e.controlEM=25;e.controlENQ=5;e.controlEOT=4;e.controlESC=27;e.controlETB=23;e.controlETX=3;e.controlFF=12;e.controlFS=28;e.controlGS=29;e.controlHT=9;e.controlLF=10;e.controlNAK=21;e.controlNULL=0;e.controlRS=30;e.controlSI=15;e.controlSO=14;e.controlSOT=2;e.controlSTX=1;e.controlSUB=26;e.controlSYN=22;e.controlUS=31;e.controlVT=11;e.copyright=169;e.copyrightsans=63721;e.copyrightserif=63193;e.cornerbracketleft=12300;e.cornerbracketlefthalfwidth=65378;e.cornerbracketleftvertical=65089;e.cornerbracketright=12301;e.cornerbracketrighthalfwidth=65379;e.cornerbracketrightvertical=65090;e.corporationsquare=13183;e.cosquare=13255;e.coverkgsquare=13254;e.cparen=9374;e.cruzeiro=8354;e.cstretched=663;e.curlyand=8911;e.curlyor=8910;e.currency=164;e.cyrBreve=63185;e.cyrFlex=63186;e.cyrbreve=63188;e.cyrflex=63189;e.d=100;e.daarmenian=1380;e.dabengali=2470;e.dadarabic=1590;e.dadeva=2342;e.dadfinalarabic=65214;e.dadinitialarabic=65215;e.dadmedialarabic=65216;e.dagesh=1468;e.dageshhebrew=1468;e.dagger=8224;e.daggerdbl=8225;e.dagujarati=2726;e.dagurmukhi=2598;e.dahiragana=12384;e.dakatakana=12480;e.dalarabic=1583;e.dalet=1491;e.daletdagesh=64307;e.daletdageshhebrew=64307;e.dalethebrew=1491;e.dalfinalarabic=65194;e.dammaarabic=1615;e.dammalowarabic=1615;e.dammatanaltonearabic=1612;e.dammatanarabic=1612;e.danda=2404;e.dargahebrew=1447;e.dargalefthebrew=1447;e.dasiapneumatacyrilliccmb=1157;e.dblGrave=63187;e.dblanglebracketleft=12298;e.dblanglebracketleftvertical=65085;e.dblanglebracketright=12299;e.dblanglebracketrightvertical=65086;e.dblarchinvertedbelowcmb=811;e.dblarrowleft=8660;e.dblarrowright=8658;e.dbldanda=2405;e.dblgrave=63190;e.dblgravecmb=783;e.dblintegral=8748;e.dbllowline=8215;e.dbllowlinecmb=819;e.dbloverlinecmb=831;e.dblprimemod=698;e.dblverticalbar=8214;e.dblverticallineabovecmb=782;e.dbopomofo=12553;e.dbsquare=13256;e.dcaron=271;e.dcedilla=7697;e.dcircle=9427;e.dcircumflexbelow=7699;e.dcroat=273;e.ddabengali=2465;e.ddadeva=2337;e.ddagujarati=2721;e.ddagurmukhi=2593;e.ddalarabic=1672;e.ddalfinalarabic=64393;e.dddhadeva=2396;e.ddhabengali=2466;e.ddhadeva=2338;e.ddhagujarati=2722;e.ddhagurmukhi=2594;e.ddotaccent=7691;e.ddotbelow=7693;e.decimalseparatorarabic=1643;e.decimalseparatorpersian=1643;e.decyrillic=1076;e.degree=176;e.dehihebrew=1453;e.dehiragana=12391;e.deicoptic=1007;e.dekatakana=12487;e.deleteleft=9003;e.deleteright=8998;e.delta=948;e.deltaturned=397;e.denominatorminusonenumeratorbengali=2552;e.dezh=676;e.dhabengali=2471;e.dhadeva=2343;e.dhagujarati=2727;e.dhagurmukhi=2599;e.dhook=599;e.dialytikatonos=901;e.dialytikatonoscmb=836;e.diamond=9830;e.diamondsuitwhite=9826;e.dieresis=168;e.dieresisacute=63191;e.dieresisbelowcmb=804;e.dieresiscmb=776;e.dieresisgrave=63192;e.dieresistonos=901;e.dihiragana=12386;e.dikatakana=12482;e.dittomark=12291;e.divide=247;e.divides=8739;e.divisionslash=8725;e.djecyrillic=1106;e.dkshade=9619;e.dlinebelow=7695;e.dlsquare=13207;e.dmacron=273;e.dmonospace=65348;e.dnblock=9604;e.dochadathai=3598;e.dodekthai=3604;e.dohiragana=12393;e.dokatakana=12489;e.dollar=36;e.dollarinferior=63203;e.dollarmonospace=65284;e.dollaroldstyle=63268;e.dollarsmall=65129;e.dollarsuperior=63204;e.dong=8363;e.dorusquare=13094;e.dotaccent=729;e.dotaccentcmb=775;e.dotbelowcmb=803;e.dotbelowcomb=803;e.dotkatakana=12539;e.dotlessi=305;e.dotlessj=63166;e.dotlessjstrokehook=644;e.dotmath=8901;e.dottedcircle=9676;e.doubleyodpatah=64287;e.doubleyodpatahhebrew=64287;e.downtackbelowcmb=798;e.downtackmod=725;e.dparen=9375;e.dsuperior=63211;e.dtail=598;e.dtopbar=396;e.duhiragana=12389;e.dukatakana=12485;e.dz=499;e.dzaltone=675;e.dzcaron=454;e.dzcurl=677;e.dzeabkhasiancyrillic=1249;e.dzecyrillic=1109;e.dzhecyrillic=1119;e.e=101;e.eacute=233;e.earth=9793;e.ebengali=2447;e.ebopomofo=12572;e.ebreve=277;e.ecandradeva=2317;e.ecandragujarati=2701;e.ecandravowelsigndeva=2373;e.ecandravowelsigngujarati=2757;e.ecaron=283;e.ecedillabreve=7709;e.echarmenian=1381;e.echyiwnarmenian=1415;e.ecircle=9428;e.ecircumflex=234;e.ecircumflexacute=7871;e.ecircumflexbelow=7705;e.ecircumflexdotbelow=7879;e.ecircumflexgrave=7873;e.ecircumflexhookabove=7875;e.ecircumflextilde=7877;e.ecyrillic=1108;e.edblgrave=517;e.edeva=2319;e.edieresis=235;e.edot=279;e.edotaccent=279;e.edotbelow=7865;e.eegurmukhi=2575;e.eematragurmukhi=2631;e.efcyrillic=1092;e.egrave=232;e.egujarati=2703;e.eharmenian=1383;e.ehbopomofo=12573;e.ehiragana=12360;e.ehookabove=7867;e.eibopomofo=12575;e.eight=56;e.eightarabic=1640;e.eightbengali=2542;e.eightcircle=9319;e.eightcircleinversesansserif=10129;e.eightdeva=2414;e.eighteencircle=9329;e.eighteenparen=9349;e.eighteenperiod=9369;e.eightgujarati=2798;e.eightgurmukhi=2670;e.eighthackarabic=1640;e.eighthangzhou=12328;e.eighthnotebeamed=9835;e.eightideographicparen=12839;e.eightinferior=8328;e.eightmonospace=65304;e.eightoldstyle=63288;e.eightparen=9339;e.eightperiod=9359;e.eightpersian=1784;e.eightroman=8567;e.eightsuperior=8312;e.eightthai=3672;e.einvertedbreve=519;e.eiotifiedcyrillic=1125;e.ekatakana=12456;e.ekatakanahalfwidth=65396;e.ekonkargurmukhi=2676;e.ekorean=12628;e.elcyrillic=1083;e.element=8712;e.elevencircle=9322;e.elevenparen=9342;e.elevenperiod=9362;e.elevenroman=8570;e.ellipsis=8230;e.ellipsisvertical=8942;e.emacron=275;e.emacronacute=7703;e.emacrongrave=7701;e.emcyrillic=1084;e.emdash=8212;e.emdashvertical=65073;e.emonospace=65349;e.emphasismarkarmenian=1371;e.emptyset=8709;e.enbopomofo=12579;e.encyrillic=1085;e.endash=8211;e.endashvertical=65074;e.endescendercyrillic=1187;e.eng=331;e.engbopomofo=12581;e.enghecyrillic=1189;e.enhookcyrillic=1224;e.enspace=8194;e.eogonek=281;e.eokorean=12627;e.eopen=603;e.eopenclosed=666;e.eopenreversed=604;e.eopenreversedclosed=606;e.eopenreversedhook=605;e.eparen=9376;e.epsilon=949;e.epsilontonos=941;e.equal=61;e.equalmonospace=65309;e.equalsmall=65126;e.equalsuperior=8316;e.equivalence=8801;e.erbopomofo=12582;e.ercyrillic=1088;e.ereversed=600;e.ereversedcyrillic=1101;e.escyrillic=1089;e.esdescendercyrillic=1195;e.esh=643;e.eshcurl=646;e.eshortdeva=2318;e.eshortvowelsigndeva=2374;e.eshreversedloop=426;e.eshsquatreversed=645;e.esmallhiragana=12359;e.esmallkatakana=12455;e.esmallkatakanahalfwidth=65386;e.estimated=8494;e.esuperior=63212;e.eta=951;e.etarmenian=1384;e.etatonos=942;e.eth=240;e.etilde=7869;e.etildebelow=7707;e.etnahtafoukhhebrew=1425;e.etnahtafoukhlefthebrew=1425;e.etnahtahebrew=1425;e.etnahtalefthebrew=1425;e.eturned=477;e.eukorean=12641;e.euro=8364;e.evowelsignbengali=2503;e.evowelsigndeva=2375;e.evowelsigngujarati=2759;e.exclam=33;e.exclamarmenian=1372;e.exclamdbl=8252;e.exclamdown=161;e.exclamdownsmall=63393;e.exclammonospace=65281;e.exclamsmall=63265;e.existential=8707;e.ezh=658;e.ezhcaron=495;e.ezhcurl=659;e.ezhreversed=441;e.ezhtail=442;e.f=102;e.fadeva=2398;e.fagurmukhi=2654;e.fahrenheit=8457;e.fathaarabic=1614;e.fathalowarabic=1614;e.fathatanarabic=1611;e.fbopomofo=12552;e.fcircle=9429;e.fdotaccent=7711;e.feharabic=1601;e.feharmenian=1414;e.fehfinalarabic=65234;e.fehinitialarabic=65235;e.fehmedialarabic=65236;e.feicoptic=997;e.female=9792;e.ff=64256;e.f_f=64256;e.ffi=64259;e.f_f_i=64259;e.ffl=64260;e.f_f_l=64260;e.fi=64257;e.f_i=64257;e.fifteencircle=9326;e.fifteenparen=9346;e.fifteenperiod=9366;e.figuredash=8210;e.filledbox=9632;e.filledrect=9644;e.finalkaf=1498;e.finalkafdagesh=64314;e.finalkafdageshhebrew=64314;e.finalkafhebrew=1498;e.finalmem=1501;e.finalmemhebrew=1501;e.finalnun=1503;e.finalnunhebrew=1503;e.finalpe=1507;e.finalpehebrew=1507;e.finaltsadi=1509;e.finaltsadihebrew=1509;e.firsttonechinese=713;e.fisheye=9673;e.fitacyrillic=1139;e.five=53;e.fivearabic=1637;e.fivebengali=2539;e.fivecircle=9316;e.fivecircleinversesansserif=10126;e.fivedeva=2411;e.fiveeighths=8541;e.fivegujarati=2795;e.fivegurmukhi=2667;e.fivehackarabic=1637;e.fivehangzhou=12325;e.fiveideographicparen=12836;e.fiveinferior=8325;e.fivemonospace=65301;e.fiveoldstyle=63285;e.fiveparen=9336;e.fiveperiod=9356;e.fivepersian=1781;e.fiveroman=8564;e.fivesuperior=8309;e.fivethai=3669;e.fl=64258;e.f_l=64258;e.florin=402;e.fmonospace=65350;e.fmsquare=13209;e.fofanthai=3615;e.fofathai=3613;e.fongmanthai=3663;e.forall=8704;e.four=52;e.fourarabic=1636;e.fourbengali=2538;e.fourcircle=9315;e.fourcircleinversesansserif=10125;e.fourdeva=2410;e.fourgujarati=2794;e.fourgurmukhi=2666;e.fourhackarabic=1636;e.fourhangzhou=12324;e.fourideographicparen=12835;e.fourinferior=8324;e.fourmonospace=65300;e.fournumeratorbengali=2551;e.fouroldstyle=63284;e.fourparen=9335;e.fourperiod=9355;e.fourpersian=1780;e.fourroman=8563;e.foursuperior=8308;e.fourteencircle=9325;e.fourteenparen=9345;e.fourteenperiod=9365;e.fourthai=3668;e.fourthtonechinese=715;e.fparen=9377;e.fraction=8260;e.franc=8355;e.g=103;e.gabengali=2455;e.gacute=501;e.gadeva=2327;e.gafarabic=1711;e.gaffinalarabic=64403;e.gafinitialarabic=64404;e.gafmedialarabic=64405;e.gagujarati=2711;e.gagurmukhi=2583;e.gahiragana=12364;e.gakatakana=12460;e.gamma=947;e.gammalatinsmall=611;e.gammasuperior=736;e.gangiacoptic=1003;e.gbopomofo=12557;e.gbreve=287;e.gcaron=487;e.gcedilla=291;e.gcircle=9430;e.gcircumflex=285;e.gcommaaccent=291;e.gdot=289;e.gdotaccent=289;e.gecyrillic=1075;e.gehiragana=12370;e.gekatakana=12466;e.geometricallyequal=8785;e.gereshaccenthebrew=1436;e.gereshhebrew=1523;e.gereshmuqdamhebrew=1437;e.germandbls=223;e.gershayimaccenthebrew=1438;e.gershayimhebrew=1524;e.getamark=12307;e.ghabengali=2456;e.ghadarmenian=1394;e.ghadeva=2328;e.ghagujarati=2712;e.ghagurmukhi=2584;e.ghainarabic=1594;e.ghainfinalarabic=65230;e.ghaininitialarabic=65231;e.ghainmedialarabic=65232;e.ghemiddlehookcyrillic=1173;e.ghestrokecyrillic=1171;e.gheupturncyrillic=1169;e.ghhadeva=2394;e.ghhagurmukhi=2650;e.ghook=608;e.ghzsquare=13203;e.gihiragana=12366;e.gikatakana=12462;e.gimarmenian=1379;e.gimel=1490;e.gimeldagesh=64306;e.gimeldageshhebrew=64306;e.gimelhebrew=1490;e.gjecyrillic=1107;e.glottalinvertedstroke=446;e.glottalstop=660;e.glottalstopinverted=662;e.glottalstopmod=704;e.glottalstopreversed=661;e.glottalstopreversedmod=705;e.glottalstopreversedsuperior=740;e.glottalstopstroke=673;e.glottalstopstrokereversed=674;e.gmacron=7713;e.gmonospace=65351;e.gohiragana=12372;e.gokatakana=12468;e.gparen=9378;e.gpasquare=13228;e.gradient=8711;e.grave=96;e.gravebelowcmb=790;e.gravecmb=768;e.gravecomb=768;e.gravedeva=2387;e.gravelowmod=718;e.gravemonospace=65344;e.gravetonecmb=832;e.greater=62;e.greaterequal=8805;e.greaterequalorless=8923;e.greatermonospace=65310;e.greaterorequivalent=8819;e.greaterorless=8823;e.greateroverequal=8807;e.greatersmall=65125;e.gscript=609;e.gstroke=485;e.guhiragana=12368;e.guillemotleft=171;e.guillemotright=187;e.guilsinglleft=8249;e.guilsinglright=8250;e.gukatakana=12464;e.guramusquare=13080;e.gysquare=13257;e.h=104;e.haabkhasiancyrillic=1193;e.haaltonearabic=1729;e.habengali=2489;e.hadescendercyrillic=1203;e.hadeva=2361;e.hagujarati=2745;e.hagurmukhi=2617;e.haharabic=1581;e.hahfinalarabic=65186;e.hahinitialarabic=65187;e.hahiragana=12399;e.hahmedialarabic=65188;e.haitusquare=13098;e.hakatakana=12495;e.hakatakanahalfwidth=65418;e.halantgurmukhi=2637;e.hamzaarabic=1569;e.hamzalowarabic=1569;e.hangulfiller=12644;e.hardsigncyrillic=1098;e.harpoonleftbarbup=8636;e.harpoonrightbarbup=8640;e.hasquare=13258;e.hatafpatah=1458;e.hatafpatah16=1458;e.hatafpatah23=1458;e.hatafpatah2f=1458;e.hatafpatahhebrew=1458;e.hatafpatahnarrowhebrew=1458;e.hatafpatahquarterhebrew=1458;e.hatafpatahwidehebrew=1458;e.hatafqamats=1459;e.hatafqamats1b=1459;e.hatafqamats28=1459;e.hatafqamats34=1459;e.hatafqamatshebrew=1459;e.hatafqamatsnarrowhebrew=1459;e.hatafqamatsquarterhebrew=1459;e.hatafqamatswidehebrew=1459;e.hatafsegol=1457;e.hatafsegol17=1457;e.hatafsegol24=1457;e.hatafsegol30=1457;e.hatafsegolhebrew=1457;e.hatafsegolnarrowhebrew=1457;e.hatafsegolquarterhebrew=1457;e.hatafsegolwidehebrew=1457;e.hbar=295;e.hbopomofo=12559;e.hbrevebelow=7723;e.hcedilla=7721;e.hcircle=9431;e.hcircumflex=293;e.hdieresis=7719;e.hdotaccent=7715;e.hdotbelow=7717;e.he=1492;e.heart=9829;e.heartsuitblack=9829;e.heartsuitwhite=9825;e.hedagesh=64308;e.hedageshhebrew=64308;e.hehaltonearabic=1729;e.heharabic=1607;e.hehebrew=1492;e.hehfinalaltonearabic=64423;e.hehfinalalttwoarabic=65258;e.hehfinalarabic=65258;e.hehhamzaabovefinalarabic=64421;e.hehhamzaaboveisolatedarabic=64420;e.hehinitialaltonearabic=64424;e.hehinitialarabic=65259;e.hehiragana=12408;e.hehmedialaltonearabic=64425;e.hehmedialarabic=65260;e.heiseierasquare=13179;e.hekatakana=12504;e.hekatakanahalfwidth=65421;e.hekutaarusquare=13110;e.henghook=615;e.herutusquare=13113;e.het=1495;e.hethebrew=1495;e.hhook=614;e.hhooksuperior=689;e.hieuhacirclekorean=12923;e.hieuhaparenkorean=12827;e.hieuhcirclekorean=12909;e.hieuhkorean=12622;e.hieuhparenkorean=12813;e.hihiragana=12402;e.hikatakana=12498;e.hikatakanahalfwidth=65419;e.hiriq=1460;e.hiriq14=1460;e.hiriq21=1460;e.hiriq2d=1460;e.hiriqhebrew=1460;e.hiriqnarrowhebrew=1460;e.hiriqquarterhebrew=1460;e.hiriqwidehebrew=1460;e.hlinebelow=7830;e.hmonospace=65352;e.hoarmenian=1392;e.hohipthai=3627;e.hohiragana=12411;e.hokatakana=12507;e.hokatakanahalfwidth=65422;e.holam=1465;e.holam19=1465;e.holam26=1465;e.holam32=1465;e.holamhebrew=1465;e.holamnarrowhebrew=1465;e.holamquarterhebrew=1465;e.holamwidehebrew=1465;e.honokhukthai=3630;e.hookabovecomb=777;e.hookcmb=777;e.hookpalatalizedbelowcmb=801;e.hookretroflexbelowcmb=802;e.hoonsquare=13122;e.horicoptic=1001;e.horizontalbar=8213;e.horncmb=795;e.hotsprings=9832;e.house=8962;e.hparen=9379;e.hsuperior=688;e.hturned=613;e.huhiragana=12405;e.huiitosquare=13107;e.hukatakana=12501;e.hukatakanahalfwidth=65420;e.hungarumlaut=733;e.hungarumlautcmb=779;e.hv=405;e.hyphen=45;e.hypheninferior=63205;e.hyphenmonospace=65293;e.hyphensmall=65123;e.hyphensuperior=63206;e.hyphentwo=8208;e.i=105;e.iacute=237;e.iacyrillic=1103;e.ibengali=2439;e.ibopomofo=12583;e.ibreve=301;e.icaron=464;e.icircle=9432;e.icircumflex=238;e.icyrillic=1110;e.idblgrave=521;e.ideographearthcircle=12943;e.ideographfirecircle=12939;e.ideographicallianceparen=12863;e.ideographiccallparen=12858;e.ideographiccentrecircle=12965;e.ideographicclose=12294;e.ideographiccomma=12289;e.ideographiccommaleft=65380;e.ideographiccongratulationparen=12855;e.ideographiccorrectcircle=12963;e.ideographicearthparen=12847;e.ideographicenterpriseparen=12861;e.ideographicexcellentcircle=12957;e.ideographicfestivalparen=12864;e.ideographicfinancialcircle=12950;e.ideographicfinancialparen=12854;e.ideographicfireparen=12843;e.ideographichaveparen=12850;e.ideographichighcircle=12964;e.ideographiciterationmark=12293;e.ideographiclaborcircle=12952;e.ideographiclaborparen=12856;e.ideographicleftcircle=12967;e.ideographiclowcircle=12966;e.ideographicmedicinecircle=12969;e.ideographicmetalparen=12846;e.ideographicmoonparen=12842;e.ideographicnameparen=12852;e.ideographicperiod=12290;e.ideographicprintcircle=12958;e.ideographicreachparen=12867;e.ideographicrepresentparen=12857;e.ideographicresourceparen=12862;e.ideographicrightcircle=12968;e.ideographicsecretcircle=12953;e.ideographicselfparen=12866;e.ideographicsocietyparen=12851;e.ideographicspace=12288;e.ideographicspecialparen=12853;e.ideographicstockparen=12849;e.ideographicstudyparen=12859;e.ideographicsunparen=12848;e.ideographicsuperviseparen=12860;e.ideographicwaterparen=12844;e.ideographicwoodparen=12845;e.ideographiczero=12295;e.ideographmetalcircle=12942;e.ideographmooncircle=12938;e.ideographnamecircle=12948;e.ideographsuncircle=12944;e.ideographwatercircle=12940;e.ideographwoodcircle=12941;e.ideva=2311;e.idieresis=239;e.idieresisacute=7727;e.idieresiscyrillic=1253;e.idotbelow=7883;e.iebrevecyrillic=1239;e.iecyrillic=1077;e.ieungacirclekorean=12917;e.ieungaparenkorean=12821;e.ieungcirclekorean=12903;e.ieungkorean=12615;e.ieungparenkorean=12807;e.igrave=236;e.igujarati=2695;e.igurmukhi=2567;e.ihiragana=12356;e.ihookabove=7881;e.iibengali=2440;e.iicyrillic=1080;e.iideva=2312;e.iigujarati=2696;e.iigurmukhi=2568;e.iimatragurmukhi=2624;e.iinvertedbreve=523;e.iishortcyrillic=1081;e.iivowelsignbengali=2496;e.iivowelsigndeva=2368;e.iivowelsigngujarati=2752;e.ij=307;e.ikatakana=12452;e.ikatakanahalfwidth=65394;e.ikorean=12643;e.ilde=732;e.iluyhebrew=1452;e.imacron=299;e.imacroncyrillic=1251;e.imageorapproximatelyequal=8787;e.imatragurmukhi=2623;e.imonospace=65353;e.increment=8710;e.infinity=8734;e.iniarmenian=1387;e.integral=8747;e.integralbottom=8993;e.integralbt=8993;e.integralex=63733;e.integraltop=8992;e.integraltp=8992;e.intersection=8745;e.intisquare=13061;e.invbullet=9688;e.invcircle=9689;e.invsmileface=9787;e.iocyrillic=1105;e.iogonek=303;e.iota=953;e.iotadieresis=970;e.iotadieresistonos=912;e.iotalatin=617;e.iotatonos=943;e.iparen=9380;e.irigurmukhi=2674;e.ismallhiragana=12355;e.ismallkatakana=12451;e.ismallkatakanahalfwidth=65384;e.issharbengali=2554;e.istroke=616;e.isuperior=63213;e.iterationhiragana=12445;e.iterationkatakana=12541;e.itilde=297;e.itildebelow=7725;e.iubopomofo=12585;e.iucyrillic=1102;e.ivowelsignbengali=2495;e.ivowelsigndeva=2367;e.ivowelsigngujarati=2751;e.izhitsacyrillic=1141;e.izhitsadblgravecyrillic=1143;e.j=106;e.jaarmenian=1393;e.jabengali=2460;e.jadeva=2332;e.jagujarati=2716;e.jagurmukhi=2588;e.jbopomofo=12560;e.jcaron=496;e.jcircle=9433;e.jcircumflex=309;e.jcrossedtail=669;e.jdotlessstroke=607;e.jecyrillic=1112;e.jeemarabic=1580;e.jeemfinalarabic=65182;e.jeeminitialarabic=65183;e.jeemmedialarabic=65184;e.jeharabic=1688;e.jehfinalarabic=64395;e.jhabengali=2461;e.jhadeva=2333;e.jhagujarati=2717;e.jhagurmukhi=2589;e.jheharmenian=1403;e.jis=12292;e.jmonospace=65354;e.jparen=9381;e.jsuperior=690;e.k=107;e.kabashkircyrillic=1185;e.kabengali=2453;e.kacute=7729;e.kacyrillic=1082;e.kadescendercyrillic=1179;e.kadeva=2325;e.kaf=1499;e.kafarabic=1603;e.kafdagesh=64315;e.kafdageshhebrew=64315;e.kaffinalarabic=65242;e.kafhebrew=1499;e.kafinitialarabic=65243;e.kafmedialarabic=65244;e.kafrafehebrew=64333;e.kagujarati=2709;e.kagurmukhi=2581;e.kahiragana=12363;e.kahookcyrillic=1220;e.kakatakana=12459;e.kakatakanahalfwidth=65398;e.kappa=954;e.kappasymbolgreek=1008;e.kapyeounmieumkorean=12657;e.kapyeounphieuphkorean=12676;e.kapyeounpieupkorean=12664;e.kapyeounssangpieupkorean=12665;e.karoriisquare=13069;e.kashidaautoarabic=1600;e.kashidaautonosidebearingarabic=1600;e.kasmallkatakana=12533;e.kasquare=13188;e.kasraarabic=1616;e.kasratanarabic=1613;e.kastrokecyrillic=1183;e.katahiraprolongmarkhalfwidth=65392;e.kaverticalstrokecyrillic=1181;e.kbopomofo=12558;e.kcalsquare=13193;e.kcaron=489;e.kcedilla=311;e.kcircle=9434;e.kcommaaccent=311;e.kdotbelow=7731;e.keharmenian=1412;e.kehiragana=12369;e.kekatakana=12465;e.kekatakanahalfwidth=65401;e.kenarmenian=1391;e.kesmallkatakana=12534;e.kgreenlandic=312;e.khabengali=2454;e.khacyrillic=1093;e.khadeva=2326;e.khagujarati=2710;e.khagurmukhi=2582;e.khaharabic=1582;e.khahfinalarabic=65190;e.khahinitialarabic=65191;e.khahmedialarabic=65192;e.kheicoptic=999;e.khhadeva=2393;e.khhagurmukhi=2649;e.khieukhacirclekorean=12920;e.khieukhaparenkorean=12824;e.khieukhcirclekorean=12906;e.khieukhkorean=12619;e.khieukhparenkorean=12810;e.khokhaithai=3586;e.khokhonthai=3589;e.khokhuatthai=3587;e.khokhwaithai=3588;e.khomutthai=3675;e.khook=409;e.khorakhangthai=3590;e.khzsquare=13201;e.kihiragana=12365;e.kikatakana=12461;e.kikatakanahalfwidth=65399;e.kiroguramusquare=13077;e.kiromeetorusquare=13078;e.kirosquare=13076;e.kiyeokacirclekorean=12910;e.kiyeokaparenkorean=12814;e.kiyeokcirclekorean=12896;e.kiyeokkorean=12593;e.kiyeokparenkorean=12800;e.kiyeoksioskorean=12595;e.kjecyrillic=1116;e.klinebelow=7733;e.klsquare=13208;e.kmcubedsquare=13222;e.kmonospace=65355;e.kmsquaredsquare=13218;e.kohiragana=12371;e.kohmsquare=13248;e.kokaithai=3585;e.kokatakana=12467;e.kokatakanahalfwidth=65402;e.kooposquare=13086;e.koppacyrillic=1153;e.koreanstandardsymbol=12927;e.koroniscmb=835;e.kparen=9382;e.kpasquare=13226;e.ksicyrillic=1135;e.ktsquare=13263;e.kturned=670;e.kuhiragana=12367;e.kukatakana=12463;e.kukatakanahalfwidth=65400;e.kvsquare=13240;e.kwsquare=13246;e.l=108;e.labengali=2482;e.lacute=314;e.ladeva=2354;e.lagujarati=2738;e.lagurmukhi=2610;e.lakkhangyaothai=3653;e.lamaleffinalarabic=65276;e.lamalefhamzaabovefinalarabic=65272;e.lamalefhamzaaboveisolatedarabic=65271;e.lamalefhamzabelowfinalarabic=65274;e.lamalefhamzabelowisolatedarabic=65273;e.lamalefisolatedarabic=65275;e.lamalefmaddaabovefinalarabic=65270;e.lamalefmaddaaboveisolatedarabic=65269;e.lamarabic=1604;e.lambda=955;e.lambdastroke=411;e.lamed=1500;e.lameddagesh=64316;e.lameddageshhebrew=64316;e.lamedhebrew=1500;e.lamfinalarabic=65246;e.lamhahinitialarabic=64714;e.laminitialarabic=65247;e.lamjeeminitialarabic=64713;e.lamkhahinitialarabic=64715;e.lamlamhehisolatedarabic=65010;e.lammedialarabic=65248;e.lammeemhahinitialarabic=64904;e.lammeeminitialarabic=64716;e.largecircle=9711;e.lbar=410;e.lbelt=620;e.lbopomofo=12556;e.lcaron=318;e.lcedilla=316;e.lcircle=9435;e.lcircumflexbelow=7741;e.lcommaaccent=316;e.ldot=320;e.ldotaccent=320;e.ldotbelow=7735;e.ldotbelowmacron=7737;e.leftangleabovecmb=794;e.lefttackbelowcmb=792;e.less=60;e.lessequal=8804;e.lessequalorgreater=8922;e.lessmonospace=65308;e.lessorequivalent=8818;e.lessorgreater=8822;e.lessoverequal=8806;e.lesssmall=65124;e.lezh=622;e.lfblock=9612;e.lhookretroflex=621;e.lira=8356;e.liwnarmenian=1388;e.lj=457;e.ljecyrillic=1113;e.ll=63168;e.lladeva=2355;e.llagujarati=2739;e.llinebelow=7739;e.llladeva=2356;e.llvocalicbengali=2529;e.llvocalicdeva=2401;e.llvocalicvowelsignbengali=2531;e.llvocalicvowelsigndeva=2403;e.lmiddletilde=619;e.lmonospace=65356;e.lmsquare=13264;e.lochulathai=3628;e.logicaland=8743;e.logicalnot=172;e.logicalnotreversed=8976;e.logicalor=8744;e.lolingthai=3621;e.longs=383;e.lowlinecenterline=65102;e.lowlinecmb=818;e.lowlinedashed=65101;e.lozenge=9674;e.lparen=9383;e.lslash=322;e.lsquare=8467;e.lsuperior=63214;e.ltshade=9617;e.luthai=3622;e.lvocalicbengali=2444;e.lvocalicdeva=2316;e.lvocalicvowelsignbengali=2530;e.lvocalicvowelsigndeva=2402;e.lxsquare=13267;e.m=109;e.mabengali=2478;e.macron=175;e.macronbelowcmb=817;e.macroncmb=772;e.macronlowmod=717;e.macronmonospace=65507;e.macute=7743;e.madeva=2350;e.magujarati=2734;e.magurmukhi=2606;e.mahapakhhebrew=1444;e.mahapakhlefthebrew=1444;e.mahiragana=12414;e.maichattawalowleftthai=63637;e.maichattawalowrightthai=63636;e.maichattawathai=3659;e.maichattawaupperleftthai=63635;e.maieklowleftthai=63628;e.maieklowrightthai=63627;e.maiekthai=3656;e.maiekupperleftthai=63626;e.maihanakatleftthai=63620;e.maihanakatthai=3633;e.maitaikhuleftthai=63625;e.maitaikhuthai=3655;e.maitholowleftthai=63631;e.maitholowrightthai=63630;e.maithothai=3657;e.maithoupperleftthai=63629;e.maitrilowleftthai=63634;e.maitrilowrightthai=63633;e.maitrithai=3658;e.maitriupperleftthai=63632;e.maiyamokthai=3654;e.makatakana=12510;e.makatakanahalfwidth=65423;e.male=9794;e.mansyonsquare=13127;e.maqafhebrew=1470;e.mars=9794;e.masoracirclehebrew=1455;e.masquare=13187;e.mbopomofo=12551;e.mbsquare=13268;e.mcircle=9436;e.mcubedsquare=13221;e.mdotaccent=7745;e.mdotbelow=7747;e.meemarabic=1605;e.meemfinalarabic=65250;e.meeminitialarabic=65251;e.meemmedialarabic=65252;e.meemmeeminitialarabic=64721;e.meemmeemisolatedarabic=64584;e.meetorusquare=13133;e.mehiragana=12417;e.meizierasquare=13182;e.mekatakana=12513;e.mekatakanahalfwidth=65426;e.mem=1502;e.memdagesh=64318;e.memdageshhebrew=64318;e.memhebrew=1502;e.menarmenian=1396;e.merkhahebrew=1445;e.merkhakefulahebrew=1446;e.merkhakefulalefthebrew=1446;e.merkhalefthebrew=1445;e.mhook=625;e.mhzsquare=13202;e.middledotkatakanahalfwidth=65381;e.middot=183;e.mieumacirclekorean=12914;e.mieumaparenkorean=12818;e.mieumcirclekorean=12900;e.mieumkorean=12609;e.mieumpansioskorean=12656;e.mieumparenkorean=12804;e.mieumpieupkorean=12654;e.mieumsioskorean=12655;e.mihiragana=12415;e.mikatakana=12511;e.mikatakanahalfwidth=65424;e.minus=8722;e.minusbelowcmb=800;e.minuscircle=8854;e.minusmod=727;e.minusplus=8723;e.minute=8242;e.miribaarusquare=13130;e.mirisquare=13129;e.mlonglegturned=624;e.mlsquare=13206;e.mmcubedsquare=13219;e.mmonospace=65357;e.mmsquaredsquare=13215;e.mohiragana=12418;e.mohmsquare=13249;e.mokatakana=12514;e.mokatakanahalfwidth=65427;e.molsquare=13270;e.momathai=3617;e.moverssquare=13223;e.moverssquaredsquare=13224;e.mparen=9384;e.mpasquare=13227;e.mssquare=13235;e.msuperior=63215;e.mturned=623;e.mu=181;e.mu1=181;e.muasquare=13186;e.muchgreater=8811;e.muchless=8810;e.mufsquare=13196;e.mugreek=956;e.mugsquare=13197;e.muhiragana=12416;e.mukatakana=12512;e.mukatakanahalfwidth=65425;e.mulsquare=13205;e.multiply=215;e.mumsquare=13211;e.munahhebrew=1443;e.munahlefthebrew=1443;e.musicalnote=9834;e.musicalnotedbl=9835;e.musicflatsign=9837;e.musicsharpsign=9839;e.mussquare=13234;e.muvsquare=13238;e.muwsquare=13244;e.mvmegasquare=13241;e.mvsquare=13239;e.mwmegasquare=13247;e.mwsquare=13245;e.n=110;e.nabengali=2472;e.nabla=8711;e.nacute=324;e.nadeva=2344;e.nagujarati=2728;e.nagurmukhi=2600;e.nahiragana=12394;e.nakatakana=12490;e.nakatakanahalfwidth=65413;e.napostrophe=329;e.nasquare=13185;e.nbopomofo=12555;e.nbspace=160;e.ncaron=328;e.ncedilla=326;e.ncircle=9437;e.ncircumflexbelow=7755;e.ncommaaccent=326;e.ndotaccent=7749;e.ndotbelow=7751;e.nehiragana=12397;e.nekatakana=12493;e.nekatakanahalfwidth=65416;e.newsheqelsign=8362;e.nfsquare=13195;e.ngabengali=2457;e.ngadeva=2329;e.ngagujarati=2713;e.ngagurmukhi=2585;e.ngonguthai=3591;e.nhiragana=12435;e.nhookleft=626;e.nhookretroflex=627;e.nieunacirclekorean=12911;e.nieunaparenkorean=12815;e.nieuncieuckorean=12597;e.nieuncirclekorean=12897;e.nieunhieuhkorean=12598;e.nieunkorean=12596;e.nieunpansioskorean=12648;e.nieunparenkorean=12801;e.nieunsioskorean=12647;e.nieuntikeutkorean=12646;e.nihiragana=12395;e.nikatakana=12491;e.nikatakanahalfwidth=65414;e.nikhahitleftthai=63641;e.nikhahitthai=3661;e.nine=57;e.ninearabic=1641;e.ninebengali=2543;e.ninecircle=9320;e.ninecircleinversesansserif=10130;e.ninedeva=2415;e.ninegujarati=2799;e.ninegurmukhi=2671;e.ninehackarabic=1641;e.ninehangzhou=12329;e.nineideographicparen=12840;e.nineinferior=8329;e.ninemonospace=65305;e.nineoldstyle=63289;e.nineparen=9340;e.nineperiod=9360;e.ninepersian=1785;e.nineroman=8568;e.ninesuperior=8313;e.nineteencircle=9330;e.nineteenparen=9350;e.nineteenperiod=9370;e.ninethai=3673;e.nj=460;e.njecyrillic=1114;e.nkatakana=12531;e.nkatakanahalfwidth=65437;e.nlegrightlong=414;e.nlinebelow=7753;e.nmonospace=65358;e.nmsquare=13210;e.nnabengali=2467;e.nnadeva=2339;e.nnagujarati=2723;e.nnagurmukhi=2595;e.nnnadeva=2345;e.nohiragana=12398;e.nokatakana=12494;e.nokatakanahalfwidth=65417;e.nonbreakingspace=160;e.nonenthai=3603;e.nonuthai=3609;e.noonarabic=1606;e.noonfinalarabic=65254;e.noonghunnaarabic=1722;e.noonghunnafinalarabic=64415;e.nooninitialarabic=65255;e.noonjeeminitialarabic=64722;e.noonjeemisolatedarabic=64587;e.noonmedialarabic=65256;e.noonmeeminitialarabic=64725;e.noonmeemisolatedarabic=64590;e.noonnoonfinalarabic=64653;e.notcontains=8716;e.notelement=8713;e.notelementof=8713;e.notequal=8800;e.notgreater=8815;e.notgreaternorequal=8817;e.notgreaternorless=8825;e.notidentical=8802;e.notless=8814;e.notlessnorequal=8816;e.notparallel=8742;e.notprecedes=8832;e.notsubset=8836;e.notsucceeds=8833;e.notsuperset=8837;e.nowarmenian=1398;e.nparen=9385;e.nssquare=13233;e.nsuperior=8319;e.ntilde=241;e.nu=957;e.nuhiragana=12396;e.nukatakana=12492;e.nukatakanahalfwidth=65415;e.nuktabengali=2492;e.nuktadeva=2364;e.nuktagujarati=2748;e.nuktagurmukhi=2620;e.numbersign=35;e.numbersignmonospace=65283;e.numbersignsmall=65119;e.numeralsigngreek=884;e.numeralsignlowergreek=885;e.numero=8470;e.nun=1504;e.nundagesh=64320;e.nundageshhebrew=64320;e.nunhebrew=1504;e.nvsquare=13237;e.nwsquare=13243;e.nyabengali=2462;e.nyadeva=2334;e.nyagujarati=2718;e.nyagurmukhi=2590;e.o=111;e.oacute=243;e.oangthai=3629;e.obarred=629;e.obarredcyrillic=1257;e.obarreddieresiscyrillic=1259;e.obengali=2451;e.obopomofo=12571;e.obreve=335;e.ocandradeva=2321;e.ocandragujarati=2705;e.ocandravowelsigndeva=2377;e.ocandravowelsigngujarati=2761;e.ocaron=466;e.ocircle=9438;e.ocircumflex=244;e.ocircumflexacute=7889;e.ocircumflexdotbelow=7897;e.ocircumflexgrave=7891;e.ocircumflexhookabove=7893;e.ocircumflextilde=7895;e.ocyrillic=1086;e.odblacute=337;e.odblgrave=525;e.odeva=2323;e.odieresis=246;e.odieresiscyrillic=1255;e.odotbelow=7885;e.oe=339;e.oekorean=12634;e.ogonek=731;e.ogonekcmb=808;e.ograve=242;e.ogujarati=2707;e.oharmenian=1413;e.ohiragana=12362;e.ohookabove=7887;e.ohorn=417;e.ohornacute=7899;e.ohorndotbelow=7907;e.ohorngrave=7901;e.ohornhookabove=7903;e.ohorntilde=7905;e.ohungarumlaut=337;e.oi=419;e.oinvertedbreve=527;e.okatakana=12458;e.okatakanahalfwidth=65397;e.okorean=12631;e.olehebrew=1451;e.omacron=333;e.omacronacute=7763;e.omacrongrave=7761;e.omdeva=2384;e.omega=969;e.omega1=982;e.omegacyrillic=1121;e.omegalatinclosed=631;e.omegaroundcyrillic=1147;e.omegatitlocyrillic=1149;e.omegatonos=974;e.omgujarati=2768;e.omicron=959;e.omicrontonos=972;e.omonospace=65359;e.one=49;e.onearabic=1633;e.onebengali=2535;e.onecircle=9312;e.onecircleinversesansserif=10122;e.onedeva=2407;e.onedotenleader=8228;e.oneeighth=8539;e.onefitted=63196;e.onegujarati=2791;e.onegurmukhi=2663;e.onehackarabic=1633;e.onehalf=189;e.onehangzhou=12321;e.oneideographicparen=12832;e.oneinferior=8321;e.onemonospace=65297;e.onenumeratorbengali=2548;e.oneoldstyle=63281;e.oneparen=9332;e.oneperiod=9352;e.onepersian=1777;e.onequarter=188;e.oneroman=8560;e.onesuperior=185;e.onethai=3665;e.onethird=8531;e.oogonek=491;e.oogonekmacron=493;e.oogurmukhi=2579;e.oomatragurmukhi=2635;e.oopen=596;e.oparen=9386;e.openbullet=9702;e.option=8997;e.ordfeminine=170;e.ordmasculine=186;e.orthogonal=8735;e.oshortdeva=2322;e.oshortvowelsigndeva=2378;e.oslash=248;e.oslashacute=511;e.osmallhiragana=12361;e.osmallkatakana=12457;e.osmallkatakanahalfwidth=65387;e.ostrokeacute=511;e.osuperior=63216;e.otcyrillic=1151;e.otilde=245;e.otildeacute=7757;e.otildedieresis=7759;e.oubopomofo=12577;e.overline=8254;e.overlinecenterline=65098;e.overlinecmb=773;e.overlinedashed=65097;e.overlinedblwavy=65100;e.overlinewavy=65099;e.overscore=175;e.ovowelsignbengali=2507;e.ovowelsigndeva=2379;e.ovowelsigngujarati=2763;e.p=112;e.paampssquare=13184;e.paasentosquare=13099;e.pabengali=2474;e.pacute=7765;e.padeva=2346;e.pagedown=8671;e.pageup=8670;e.pagujarati=2730;e.pagurmukhi=2602;e.pahiragana=12401;e.paiyannoithai=3631;e.pakatakana=12497;e.palatalizationcyrilliccmb=1156;e.palochkacyrillic=1216;e.pansioskorean=12671;e.paragraph=182;e.parallel=8741;e.parenleft=40;e.parenleftaltonearabic=64830;e.parenleftbt=63725;e.parenleftex=63724;e.parenleftinferior=8333;e.parenleftmonospace=65288;e.parenleftsmall=65113;e.parenleftsuperior=8317;e.parenlefttp=63723;e.parenleftvertical=65077;e.parenright=41;e.parenrightaltonearabic=64831;e.parenrightbt=63736;e.parenrightex=63735;e.parenrightinferior=8334;e.parenrightmonospace=65289;e.parenrightsmall=65114;e.parenrightsuperior=8318;e.parenrighttp=63734;e.parenrightvertical=65078;e.partialdiff=8706;e.paseqhebrew=1472;e.pashtahebrew=1433;e.pasquare=13225;e.patah=1463;e.patah11=1463;e.patah1d=1463;e.patah2a=1463;e.patahhebrew=1463;e.patahnarrowhebrew=1463;e.patahquarterhebrew=1463;e.patahwidehebrew=1463;e.pazerhebrew=1441;e.pbopomofo=12550;e.pcircle=9439;e.pdotaccent=7767;e.pe=1508;e.pecyrillic=1087;e.pedagesh=64324;e.pedageshhebrew=64324;e.peezisquare=13115;e.pefinaldageshhebrew=64323;e.peharabic=1662;e.peharmenian=1402;e.pehebrew=1508;e.pehfinalarabic=64343;e.pehinitialarabic=64344;e.pehiragana=12410;e.pehmedialarabic=64345;e.pekatakana=12506;e.pemiddlehookcyrillic=1191;e.perafehebrew=64334;e.percent=37;e.percentarabic=1642;e.percentmonospace=65285;e.percentsmall=65130;e.period=46;e.periodarmenian=1417;e.periodcentered=183;e.periodhalfwidth=65377;e.periodinferior=63207;e.periodmonospace=65294;e.periodsmall=65106;e.periodsuperior=63208;e.perispomenigreekcmb=834;e.perpendicular=8869;e.perthousand=8240;e.peseta=8359;e.pfsquare=13194;e.phabengali=2475;e.phadeva=2347;e.phagujarati=2731;e.phagurmukhi=2603;e.phi=966;e.phi1=981;e.phieuphacirclekorean=12922;e.phieuphaparenkorean=12826;e.phieuphcirclekorean=12908;e.phieuphkorean=12621;e.phieuphparenkorean=12812;e.philatin=632;e.phinthuthai=3642;e.phisymbolgreek=981;e.phook=421;e.phophanthai=3614;e.phophungthai=3612;e.phosamphaothai=3616;e.pi=960;e.pieupacirclekorean=12915;e.pieupaparenkorean=12819;e.pieupcieuckorean=12662;e.pieupcirclekorean=12901;e.pieupkiyeokkorean=12658;e.pieupkorean=12610;e.pieupparenkorean=12805;e.pieupsioskiyeokkorean=12660;e.pieupsioskorean=12612;e.pieupsiostikeutkorean=12661;e.pieupthieuthkorean=12663;e.pieuptikeutkorean=12659;e.pihiragana=12404;e.pikatakana=12500;e.pisymbolgreek=982;e.piwrarmenian=1411;e.planckover2pi=8463;e.planckover2pi1=8463;e.plus=43;e.plusbelowcmb=799;e.pluscircle=8853;e.plusminus=177;e.plusmod=726;e.plusmonospace=65291;e.plussmall=65122;e.plussuperior=8314;e.pmonospace=65360;e.pmsquare=13272;e.pohiragana=12413;e.pointingindexdownwhite=9759;e.pointingindexleftwhite=9756;e.pointingindexrightwhite=9758;e.pointingindexupwhite=9757;e.pokatakana=12509;e.poplathai=3611;e.postalmark=12306;e.postalmarkface=12320;e.pparen=9387;e.precedes=8826;e.prescription=8478;e.primemod=697;e.primereversed=8245;e.product=8719;e.projective=8965;e.prolongedkana=12540;e.propellor=8984;e.propersubset=8834;e.propersuperset=8835;e.proportion=8759;e.proportional=8733;e.psi=968;e.psicyrillic=1137;e.psilipneumatacyrilliccmb=1158;e.pssquare=13232;e.puhiragana=12407;e.pukatakana=12503;e.pvsquare=13236;e.pwsquare=13242;e.q=113;e.qadeva=2392;e.qadmahebrew=1448;e.qafarabic=1602;e.qaffinalarabic=65238;e.qafinitialarabic=65239;e.qafmedialarabic=65240;e.qamats=1464;e.qamats10=1464;e.qamats1a=1464;e.qamats1c=1464;e.qamats27=1464;e.qamats29=1464;e.qamats33=1464;e.qamatsde=1464;e.qamatshebrew=1464;e.qamatsnarrowhebrew=1464;e.qamatsqatanhebrew=1464;e.qamatsqatannarrowhebrew=1464;e.qamatsqatanquarterhebrew=1464;e.qamatsqatanwidehebrew=1464;e.qamatsquarterhebrew=1464;e.qamatswidehebrew=1464;e.qarneyparahebrew=1439;e.qbopomofo=12561;e.qcircle=9440;e.qhook=672;e.qmonospace=65361;e.qof=1511;e.qofdagesh=64327;e.qofdageshhebrew=64327;e.qofhebrew=1511;e.qparen=9388;e.quarternote=9833;e.qubuts=1467;e.qubuts18=1467;e.qubuts25=1467;e.qubuts31=1467;e.qubutshebrew=1467;e.qubutsnarrowhebrew=1467;e.qubutsquarterhebrew=1467;e.qubutswidehebrew=1467;e.question=63;e.questionarabic=1567;e.questionarmenian=1374;e.questiondown=191;e.questiondownsmall=63423;e.questiongreek=894;e.questionmonospace=65311;e.questionsmall=63295;e.quotedbl=34;e.quotedblbase=8222;e.quotedblleft=8220;e.quotedblmonospace=65282;e.quotedblprime=12318;e.quotedblprimereversed=12317;e.quotedblright=8221;e.quoteleft=8216;e.quoteleftreversed=8219;e.quotereversed=8219;e.quoteright=8217;e.quoterightn=329;e.quotesinglbase=8218;e.quotesingle=39;e.quotesinglemonospace=65287;e.r=114;e.raarmenian=1404;e.rabengali=2480;e.racute=341;e.radeva=2352;e.radical=8730;e.radicalex=63717;e.radoverssquare=13230;e.radoverssquaredsquare=13231;e.radsquare=13229;e.rafe=1471;e.rafehebrew=1471;e.ragujarati=2736;e.ragurmukhi=2608;e.rahiragana=12425;e.rakatakana=12521;e.rakatakanahalfwidth=65431;e.ralowerdiagonalbengali=2545;e.ramiddlediagonalbengali=2544;e.ramshorn=612;e.ratio=8758;e.rbopomofo=12566;e.rcaron=345;e.rcedilla=343;e.rcircle=9441;e.rcommaaccent=343;e.rdblgrave=529;e.rdotaccent=7769;e.rdotbelow=7771;e.rdotbelowmacron=7773;e.referencemark=8251;e.reflexsubset=8838;e.reflexsuperset=8839;e.registered=174;e.registersans=63720;e.registerserif=63194;e.reharabic=1585;e.reharmenian=1408;e.rehfinalarabic=65198;e.rehiragana=12428;e.rekatakana=12524;e.rekatakanahalfwidth=65434;e.resh=1512;e.reshdageshhebrew=64328;e.reshhebrew=1512;e.reversedtilde=8765;e.reviahebrew=1431;e.reviamugrashhebrew=1431;e.revlogicalnot=8976;e.rfishhook=638;e.rfishhookreversed=639;e.rhabengali=2525;e.rhadeva=2397;e.rho=961;e.rhook=637;e.rhookturned=635;e.rhookturnedsuperior=693;e.rhosymbolgreek=1009;e.rhotichookmod=734;e.rieulacirclekorean=12913;e.rieulaparenkorean=12817;e.rieulcirclekorean=12899;e.rieulhieuhkorean=12608;e.rieulkiyeokkorean=12602;e.rieulkiyeoksioskorean=12649;e.rieulkorean=12601;e.rieulmieumkorean=12603;e.rieulpansioskorean=12652;e.rieulparenkorean=12803;e.rieulphieuphkorean=12607;e.rieulpieupkorean=12604;e.rieulpieupsioskorean=12651;e.rieulsioskorean=12605;e.rieulthieuthkorean=12606;e.rieultikeutkorean=12650;e.rieulyeorinhieuhkorean=12653;e.rightangle=8735;e.righttackbelowcmb=793;e.righttriangle=8895;e.rihiragana=12426;e.rikatakana=12522;e.rikatakanahalfwidth=65432;e.ring=730;e.ringbelowcmb=805;e.ringcmb=778;e.ringhalfleft=703;e.ringhalfleftarmenian=1369;e.ringhalfleftbelowcmb=796;e.ringhalfleftcentered=723;e.ringhalfright=702;e.ringhalfrightbelowcmb=825;e.ringhalfrightcentered=722;e.rinvertedbreve=531;e.rittorusquare=13137;e.rlinebelow=7775;e.rlongleg=636;e.rlonglegturned=634;e.rmonospace=65362;e.rohiragana=12429;e.rokatakana=12525;e.rokatakanahalfwidth=65435;e.roruathai=3619;e.rparen=9389;e.rrabengali=2524;e.rradeva=2353;e.rragurmukhi=2652;e.rreharabic=1681;e.rrehfinalarabic=64397;e.rrvocalicbengali=2528;e.rrvocalicdeva=2400;e.rrvocalicgujarati=2784;e.rrvocalicvowelsignbengali=2500;e.rrvocalicvowelsigndeva=2372;e.rrvocalicvowelsigngujarati=2756;e.rsuperior=63217;e.rtblock=9616;e.rturned=633;e.rturnedsuperior=692;e.ruhiragana=12427;e.rukatakana=12523;e.rukatakanahalfwidth=65433;e.rupeemarkbengali=2546;e.rupeesignbengali=2547;e.rupiah=63197;e.ruthai=3620;e.rvocalicbengali=2443;e.rvocalicdeva=2315;e.rvocalicgujarati=2699;e.rvocalicvowelsignbengali=2499;e.rvocalicvowelsigndeva=2371;e.rvocalicvowelsigngujarati=2755;e.s=115;e.sabengali=2488;e.sacute=347;e.sacutedotaccent=7781;e.sadarabic=1589;e.sadeva=2360;e.sadfinalarabic=65210;e.sadinitialarabic=65211;e.sadmedialarabic=65212;e.sagujarati=2744;e.sagurmukhi=2616;e.sahiragana=12373;e.sakatakana=12469;e.sakatakanahalfwidth=65403;e.sallallahoualayhewasallamarabic=65018;e.samekh=1505;e.samekhdagesh=64321;e.samekhdageshhebrew=64321;e.samekhhebrew=1505;e.saraaathai=3634;e.saraaethai=3649;e.saraaimaimalaithai=3652;e.saraaimaimuanthai=3651;e.saraamthai=3635;e.saraathai=3632;e.saraethai=3648;e.saraiileftthai=63622;e.saraiithai=3637;e.saraileftthai=63621;e.saraithai=3636;e.saraothai=3650;e.saraueeleftthai=63624;e.saraueethai=3639;e.saraueleftthai=63623;e.sarauethai=3638;e.sarauthai=3640;e.sarauuthai=3641;e.sbopomofo=12569;e.scaron=353;e.scarondotaccent=7783;e.scedilla=351;e.schwa=601;e.schwacyrillic=1241;e.schwadieresiscyrillic=1243;e.schwahook=602;e.scircle=9442;e.scircumflex=349;e.scommaaccent=537;e.sdotaccent=7777;e.sdotbelow=7779;e.sdotbelowdotaccent=7785;e.seagullbelowcmb=828;e.second=8243;e.secondtonechinese=714;e.section=167;e.seenarabic=1587;e.seenfinalarabic=65202;e.seeninitialarabic=65203;e.seenmedialarabic=65204;e.segol=1462;e.segol13=1462;e.segol1f=1462;e.segol2c=1462;e.segolhebrew=1462;e.segolnarrowhebrew=1462;e.segolquarterhebrew=1462;e.segoltahebrew=1426;e.segolwidehebrew=1462;e.seharmenian=1405;e.sehiragana=12379;e.sekatakana=12475;e.sekatakanahalfwidth=65406;e.semicolon=59;e.semicolonarabic=1563;e.semicolonmonospace=65307;e.semicolonsmall=65108;e.semivoicedmarkkana=12444;e.semivoicedmarkkanahalfwidth=65439;e.sentisquare=13090;e.sentosquare=13091;e.seven=55;e.sevenarabic=1639;e.sevenbengali=2541;e.sevencircle=9318;e.sevencircleinversesansserif=10128;e.sevendeva=2413;e.seveneighths=8542;e.sevengujarati=2797;e.sevengurmukhi=2669;e.sevenhackarabic=1639;e.sevenhangzhou=12327;e.sevenideographicparen=12838;e.seveninferior=8327;e.sevenmonospace=65303;e.sevenoldstyle=63287;e.sevenparen=9338;e.sevenperiod=9358;e.sevenpersian=1783;e.sevenroman=8566;e.sevensuperior=8311;e.seventeencircle=9328;e.seventeenparen=9348;e.seventeenperiod=9368;e.seventhai=3671;e.sfthyphen=173;e.shaarmenian=1399;e.shabengali=2486;e.shacyrillic=1096;e.shaddaarabic=1617;e.shaddadammaarabic=64609;e.shaddadammatanarabic=64606;e.shaddafathaarabic=64608;e.shaddakasraarabic=64610;e.shaddakasratanarabic=64607;e.shade=9618;e.shadedark=9619;e.shadelight=9617;e.shademedium=9618;e.shadeva=2358;e.shagujarati=2742;e.shagurmukhi=2614;e.shalshelethebrew=1427;e.shbopomofo=12565;e.shchacyrillic=1097;e.sheenarabic=1588;e.sheenfinalarabic=65206;e.sheeninitialarabic=65207;e.sheenmedialarabic=65208;e.sheicoptic=995;e.sheqel=8362;e.sheqelhebrew=8362;e.sheva=1456;e.sheva115=1456;e.sheva15=1456;e.sheva22=1456;e.sheva2e=1456;e.shevahebrew=1456;e.shevanarrowhebrew=1456;e.shevaquarterhebrew=1456;e.shevawidehebrew=1456;e.shhacyrillic=1211;e.shimacoptic=1005;e.shin=1513;e.shindagesh=64329;e.shindageshhebrew=64329;e.shindageshshindot=64300;e.shindageshshindothebrew=64300;e.shindageshsindot=64301;e.shindageshsindothebrew=64301;e.shindothebrew=1473;e.shinhebrew=1513;e.shinshindot=64298;e.shinshindothebrew=64298;e.shinsindot=64299;e.shinsindothebrew=64299;e.shook=642;e.sigma=963;e.sigma1=962;e.sigmafinal=962;e.sigmalunatesymbolgreek=1010;e.sihiragana=12375;e.sikatakana=12471;e.sikatakanahalfwidth=65404;e.siluqhebrew=1469;e.siluqlefthebrew=1469;e.similar=8764;e.sindothebrew=1474;e.siosacirclekorean=12916;e.siosaparenkorean=12820;e.sioscieuckorean=12670;e.sioscirclekorean=12902;e.sioskiyeokkorean=12666;e.sioskorean=12613;e.siosnieunkorean=12667;e.siosparenkorean=12806;e.siospieupkorean=12669;e.siostikeutkorean=12668;e.six=54;e.sixarabic=1638;e.sixbengali=2540;e.sixcircle=9317;e.sixcircleinversesansserif=10127;e.sixdeva=2412;e.sixgujarati=2796;e.sixgurmukhi=2668;e.sixhackarabic=1638;e.sixhangzhou=12326;e.sixideographicparen=12837;e.sixinferior=8326;e.sixmonospace=65302;e.sixoldstyle=63286;e.sixparen=9337;e.sixperiod=9357;e.sixpersian=1782;e.sixroman=8565;e.sixsuperior=8310;e.sixteencircle=9327;e.sixteencurrencydenominatorbengali=2553;e.sixteenparen=9347;e.sixteenperiod=9367;e.sixthai=3670;e.slash=47;e.slashmonospace=65295;e.slong=383;e.slongdotaccent=7835;e.smileface=9786;e.smonospace=65363;e.sofpasuqhebrew=1475;e.softhyphen=173;e.softsigncyrillic=1100;e.sohiragana=12381;e.sokatakana=12477;e.sokatakanahalfwidth=65407;e.soliduslongoverlaycmb=824;e.solidusshortoverlaycmb=823;e.sorusithai=3625;e.sosalathai=3624;e.sosothai=3595;e.sosuathai=3626;e.space=32;e.spacehackarabic=32;e.spade=9824;e.spadesuitblack=9824;e.spadesuitwhite=9828;e.sparen=9390;e.squarebelowcmb=827;e.squarecc=13252;e.squarecm=13213;e.squarediagonalcrosshatchfill=9641;e.squarehorizontalfill=9636;e.squarekg=13199;e.squarekm=13214;e.squarekmcapital=13262;e.squareln=13265;e.squarelog=13266;e.squaremg=13198;e.squaremil=13269;e.squaremm=13212;e.squaremsquared=13217;e.squareorthogonalcrosshatchfill=9638;e.squareupperlefttolowerrightfill=9639;e.squareupperrighttolowerleftfill=9640;e.squareverticalfill=9637;e.squarewhitewithsmallblack=9635;e.srsquare=13275;e.ssabengali=2487;e.ssadeva=2359;e.ssagujarati=2743;e.ssangcieuckorean=12617;e.ssanghieuhkorean=12677;e.ssangieungkorean=12672;e.ssangkiyeokkorean=12594;e.ssangnieunkorean=12645;e.ssangpieupkorean=12611;e.ssangsioskorean=12614;e.ssangtikeutkorean=12600;e.ssuperior=63218;e.sterling=163;e.sterlingmonospace=65505;e.strokelongoverlaycmb=822;e.strokeshortoverlaycmb=821;e.subset=8834;e.subsetnotequal=8842;e.subsetorequal=8838;e.succeeds=8827;e.suchthat=8715;e.suhiragana=12377;e.sukatakana=12473;e.sukatakanahalfwidth=65405;e.sukunarabic=1618;e.summation=8721;e.sun=9788;e.superset=8835;e.supersetnotequal=8843;e.supersetorequal=8839;e.svsquare=13276;e.syouwaerasquare=13180;e.t=116;e.tabengali=2468;e.tackdown=8868;e.tackleft=8867;e.tadeva=2340;e.tagujarati=2724;e.tagurmukhi=2596;e.taharabic=1591;e.tahfinalarabic=65218;e.tahinitialarabic=65219;e.tahiragana=12383;e.tahmedialarabic=65220;e.taisyouerasquare=13181;e.takatakana=12479;e.takatakanahalfwidth=65408;e.tatweelarabic=1600;e.tau=964;e.tav=1514;e.tavdages=64330;e.tavdagesh=64330;e.tavdageshhebrew=64330;e.tavhebrew=1514;e.tbar=359;e.tbopomofo=12554;e.tcaron=357;e.tccurl=680;e.tcedilla=355;e.tcheharabic=1670;e.tchehfinalarabic=64379;e.tchehinitialarabic=64380;e.tchehmedialarabic=64381;e.tcircle=9443;e.tcircumflexbelow=7793;e.tcommaaccent=355;e.tdieresis=7831;e.tdotaccent=7787;e.tdotbelow=7789;e.tecyrillic=1090;e.tedescendercyrillic=1197;e.teharabic=1578;e.tehfinalarabic=65174;e.tehhahinitialarabic=64674;e.tehhahisolatedarabic=64524;e.tehinitialarabic=65175;e.tehiragana=12390;e.tehjeeminitialarabic=64673;e.tehjeemisolatedarabic=64523;e.tehmarbutaarabic=1577;e.tehmarbutafinalarabic=65172;e.tehmedialarabic=65176;e.tehmeeminitialarabic=64676;e.tehmeemisolatedarabic=64526;e.tehnoonfinalarabic=64627;e.tekatakana=12486;e.tekatakanahalfwidth=65411;e.telephone=8481;e.telephoneblack=9742;e.telishagedolahebrew=1440;e.telishaqetanahebrew=1449;e.tencircle=9321;e.tenideographicparen=12841;e.tenparen=9341;e.tenperiod=9361;e.tenroman=8569;e.tesh=679;e.tet=1496;e.tetdagesh=64312;e.tetdageshhebrew=64312;e.tethebrew=1496;e.tetsecyrillic=1205;e.tevirhebrew=1435;e.tevirlefthebrew=1435;e.thabengali=2469;e.thadeva=2341;e.thagujarati=2725;e.thagurmukhi=2597;e.thalarabic=1584;e.thalfinalarabic=65196;e.thanthakhatlowleftthai=63640;e.thanthakhatlowrightthai=63639;e.thanthakhatthai=3660;e.thanthakhatupperleftthai=63638;e.theharabic=1579;e.thehfinalarabic=65178;e.thehinitialarabic=65179;e.thehmedialarabic=65180;e.thereexists=8707;e.therefore=8756;e.theta=952;e.theta1=977;e.thetasymbolgreek=977;e.thieuthacirclekorean=12921;e.thieuthaparenkorean=12825;e.thieuthcirclekorean=12907;e.thieuthkorean=12620;e.thieuthparenkorean=12811;e.thirteencircle=9324;e.thirteenparen=9344;e.thirteenperiod=9364;e.thonangmonthothai=3601;e.thook=429;e.thophuthaothai=3602;e.thorn=254;e.thothahanthai=3607;e.thothanthai=3600;e.thothongthai=3608;e.thothungthai=3606;e.thousandcyrillic=1154;e.thousandsseparatorarabic=1644;e.thousandsseparatorpersian=1644;e.three=51;e.threearabic=1635;e.threebengali=2537;e.threecircle=9314;e.threecircleinversesansserif=10124;e.threedeva=2409;e.threeeighths=8540;e.threegujarati=2793;e.threegurmukhi=2665;e.threehackarabic=1635;e.threehangzhou=12323;e.threeideographicparen=12834;e.threeinferior=8323;e.threemonospace=65299;e.threenumeratorbengali=2550;e.threeoldstyle=63283;e.threeparen=9334;e.threeperiod=9354;e.threepersian=1779;e.threequarters=190;e.threequartersemdash=63198;e.threeroman=8562;e.threesuperior=179;e.threethai=3667;e.thzsquare=13204;e.tihiragana=12385;e.tikatakana=12481;e.tikatakanahalfwidth=65409;e.tikeutacirclekorean=12912;e.tikeutaparenkorean=12816;e.tikeutcirclekorean=12898;e.tikeutkorean=12599;e.tikeutparenkorean=12802;e.tilde=732;e.tildebelowcmb=816;e.tildecmb=771;e.tildecomb=771;e.tildedoublecmb=864;e.tildeoperator=8764;e.tildeoverlaycmb=820;e.tildeverticalcmb=830;e.timescircle=8855;e.tipehahebrew=1430;e.tipehalefthebrew=1430;e.tippigurmukhi=2672;e.titlocyrilliccmb=1155;e.tiwnarmenian=1407;e.tlinebelow=7791;e.tmonospace=65364;e.toarmenian=1385;e.tohiragana=12392;e.tokatakana=12488;e.tokatakanahalfwidth=65412;e.tonebarextrahighmod=741;e.tonebarextralowmod=745;e.tonebarhighmod=742;e.tonebarlowmod=744;e.tonebarmidmod=743;e.tonefive=445;e.tonesix=389;e.tonetwo=424;e.tonos=900;e.tonsquare=13095;e.topatakthai=3599;e.tortoiseshellbracketleft=12308;e.tortoiseshellbracketleftsmall=65117;e.tortoiseshellbracketleftvertical=65081;e.tortoiseshellbracketright=12309;e.tortoiseshellbracketrightsmall=65118;e.tortoiseshellbracketrightvertical=65082;e.totaothai=3605;e.tpalatalhook=427;e.tparen=9391;e.trademark=8482;e.trademarksans=63722;e.trademarkserif=63195;e.tretroflexhook=648;e.triagdn=9660;e.triaglf=9668;e.triagrt=9658;e.triagup=9650;e.ts=678;e.tsadi=1510;e.tsadidagesh=64326;e.tsadidageshhebrew=64326;e.tsadihebrew=1510;e.tsecyrillic=1094;e.tsere=1461;e.tsere12=1461;e.tsere1e=1461;e.tsere2b=1461;e.tserehebrew=1461;e.tserenarrowhebrew=1461;e.tserequarterhebrew=1461;e.tserewidehebrew=1461;e.tshecyrillic=1115;e.tsuperior=63219;e.ttabengali=2463;e.ttadeva=2335;e.ttagujarati=2719;e.ttagurmukhi=2591;e.tteharabic=1657;e.ttehfinalarabic=64359;e.ttehinitialarabic=64360;e.ttehmedialarabic=64361;e.tthabengali=2464;e.tthadeva=2336;e.tthagujarati=2720;e.tthagurmukhi=2592;e.tturned=647;e.tuhiragana=12388;e.tukatakana=12484;e.tukatakanahalfwidth=65410;e.tusmallhiragana=12387;e.tusmallkatakana=12483;e.tusmallkatakanahalfwidth=65391;e.twelvecircle=9323;e.twelveparen=9343;e.twelveperiod=9363;e.twelveroman=8571;e.twentycircle=9331;e.twentyhangzhou=21316;e.twentyparen=9351;e.twentyperiod=9371;e.two=50;e.twoarabic=1634;e.twobengali=2536;e.twocircle=9313;e.twocircleinversesansserif=10123;e.twodeva=2408;e.twodotenleader=8229;e.twodotleader=8229;e.twodotleadervertical=65072;e.twogujarati=2792;e.twogurmukhi=2664;e.twohackarabic=1634;e.twohangzhou=12322;e.twoideographicparen=12833;e.twoinferior=8322;e.twomonospace=65298;e.twonumeratorbengali=2549;e.twooldstyle=63282;e.twoparen=9333;e.twoperiod=9353;e.twopersian=1778;e.tworoman=8561;e.twostroke=443;e.twosuperior=178;e.twothai=3666;e.twothirds=8532;e.u=117;e.uacute=250;e.ubar=649;e.ubengali=2441;e.ubopomofo=12584;e.ubreve=365;e.ucaron=468;e.ucircle=9444;e.ucircumflex=251;e.ucircumflexbelow=7799;e.ucyrillic=1091;e.udattadeva=2385;e.udblacute=369;e.udblgrave=533;e.udeva=2313;e.udieresis=252;e.udieresisacute=472;e.udieresisbelow=7795;e.udieresiscaron=474;e.udieresiscyrillic=1265;e.udieresisgrave=476;e.udieresismacron=470;e.udotbelow=7909;e.ugrave=249;e.ugujarati=2697;e.ugurmukhi=2569;e.uhiragana=12358;e.uhookabove=7911;e.uhorn=432;e.uhornacute=7913;e.uhorndotbelow=7921;e.uhorngrave=7915;e.uhornhookabove=7917;e.uhorntilde=7919;e.uhungarumlaut=369;e.uhungarumlautcyrillic=1267;e.uinvertedbreve=535;e.ukatakana=12454;e.ukatakanahalfwidth=65395;e.ukcyrillic=1145;e.ukorean=12636;e.umacron=363;e.umacroncyrillic=1263;e.umacrondieresis=7803;e.umatragurmukhi=2625;e.umonospace=65365;e.underscore=95;e.underscoredbl=8215;e.underscoremonospace=65343;e.underscorevertical=65075;e.underscorewavy=65103;e.union=8746;e.universal=8704;e.uogonek=371;e.uparen=9392;e.upblock=9600;e.upperdothebrew=1476;e.upsilon=965;e.upsilondieresis=971;e.upsilondieresistonos=944;e.upsilonlatin=650;e.upsilontonos=973;e.uptackbelowcmb=797;e.uptackmod=724;e.uragurmukhi=2675;e.uring=367;e.ushortcyrillic=1118;e.usmallhiragana=12357;e.usmallkatakana=12453;e.usmallkatakanahalfwidth=65385;e.ustraightcyrillic=1199;e.ustraightstrokecyrillic=1201;e.utilde=361;e.utildeacute=7801;e.utildebelow=7797;e.uubengali=2442;e.uudeva=2314;e.uugujarati=2698;e.uugurmukhi=2570;e.uumatragurmukhi=2626;e.uuvowelsignbengali=2498;e.uuvowelsigndeva=2370;e.uuvowelsigngujarati=2754;e.uvowelsignbengali=2497;e.uvowelsigndeva=2369;e.uvowelsigngujarati=2753;e.v=118;e.vadeva=2357;e.vagujarati=2741;e.vagurmukhi=2613;e.vakatakana=12535;e.vav=1493;e.vavdagesh=64309;e.vavdagesh65=64309;e.vavdageshhebrew=64309;e.vavhebrew=1493;e.vavholam=64331;e.vavholamhebrew=64331;e.vavvavhebrew=1520;e.vavyodhebrew=1521;e.vcircle=9445;e.vdotbelow=7807;e.vecyrillic=1074;e.veharabic=1700;e.vehfinalarabic=64363;e.vehinitialarabic=64364;e.vehmedialarabic=64365;e.vekatakana=12537;e.venus=9792;e.verticalbar=124;e.verticallineabovecmb=781;e.verticallinebelowcmb=809;e.verticallinelowmod=716;e.verticallinemod=712;e.vewarmenian=1406;e.vhook=651;e.vikatakana=12536;e.viramabengali=2509;e.viramadeva=2381;e.viramagujarati=2765;e.visargabengali=2435;e.visargadeva=2307;e.visargagujarati=2691;e.vmonospace=65366;e.voarmenian=1400;e.voicediterationhiragana=12446;e.voicediterationkatakana=12542;e.voicedmarkkana=12443;e.voicedmarkkanahalfwidth=65438;e.vokatakana=12538;e.vparen=9393;e.vtilde=7805;e.vturned=652;e.vuhiragana=12436;e.vukatakana=12532;e.w=119;e.wacute=7811;e.waekorean=12633;e.wahiragana=12431;e.wakatakana=12527;e.wakatakanahalfwidth=65436;e.wakorean=12632;e.wasmallhiragana=12430;e.wasmallkatakana=12526;e.wattosquare=13143;e.wavedash=12316;e.wavyunderscorevertical=65076;e.wawarabic=1608;e.wawfinalarabic=65262;e.wawhamzaabovearabic=1572;e.wawhamzaabovefinalarabic=65158;e.wbsquare=13277;e.wcircle=9446;e.wcircumflex=373;e.wdieresis=7813;e.wdotaccent=7815;e.wdotbelow=7817;e.wehiragana=12433;e.weierstrass=8472;e.wekatakana=12529;e.wekorean=12638;e.weokorean=12637;e.wgrave=7809;e.whitebullet=9702;e.whitecircle=9675;e.whitecircleinverse=9689;e.whitecornerbracketleft=12302;e.whitecornerbracketleftvertical=65091;e.whitecornerbracketright=12303;e.whitecornerbracketrightvertical=65092;e.whitediamond=9671;e.whitediamondcontainingblacksmalldiamond=9672;e.whitedownpointingsmalltriangle=9663;e.whitedownpointingtriangle=9661;e.whiteleftpointingsmalltriangle=9667;e.whiteleftpointingtriangle=9665;e.whitelenticularbracketleft=12310;e.whitelenticularbracketright=12311;e.whiterightpointingsmalltriangle=9657;e.whiterightpointingtriangle=9655;e.whitesmallsquare=9643;e.whitesmilingface=9786;e.whitesquare=9633;e.whitestar=9734;e.whitetelephone=9743;e.whitetortoiseshellbracketleft=12312;e.whitetortoiseshellbracketright=12313;e.whiteuppointingsmalltriangle=9653;e.whiteuppointingtriangle=9651;e.wihiragana=12432;e.wikatakana=12528;e.wikorean=12639;e.wmonospace=65367;e.wohiragana=12434;e.wokatakana=12530;e.wokatakanahalfwidth=65382;e.won=8361;e.wonmonospace=65510;e.wowaenthai=3623;e.wparen=9394;e.wring=7832;e.wsuperior=695;e.wturned=653;e.wynn=447;e.x=120;e.xabovecmb=829;e.xbopomofo=12562;e.xcircle=9447;e.xdieresis=7821;e.xdotaccent=7819;e.xeharmenian=1389;e.xi=958;e.xmonospace=65368;e.xparen=9395;e.xsuperior=739;e.y=121;e.yaadosquare=13134;e.yabengali=2479;e.yacute=253;e.yadeva=2351;e.yaekorean=12626;e.yagujarati=2735;e.yagurmukhi=2607;e.yahiragana=12420;e.yakatakana=12516;e.yakatakanahalfwidth=65428;e.yakorean=12625;e.yamakkanthai=3662;e.yasmallhiragana=12419;e.yasmallkatakana=12515;e.yasmallkatakanahalfwidth=65388;e.yatcyrillic=1123;e.ycircle=9448;e.ycircumflex=375;e.ydieresis=255;e.ydotaccent=7823;e.ydotbelow=7925;e.yeharabic=1610;e.yehbarreearabic=1746;e.yehbarreefinalarabic=64431;e.yehfinalarabic=65266;e.yehhamzaabovearabic=1574;e.yehhamzaabovefinalarabic=65162;e.yehhamzaaboveinitialarabic=65163;e.yehhamzaabovemedialarabic=65164;e.yehinitialarabic=65267;e.yehmedialarabic=65268;e.yehmeeminitialarabic=64733;e.yehmeemisolatedarabic=64600;e.yehnoonfinalarabic=64660;e.yehthreedotsbelowarabic=1745;e.yekorean=12630;e.yen=165;e.yenmonospace=65509;e.yeokorean=12629;e.yeorinhieuhkorean=12678;e.yerahbenyomohebrew=1450;e.yerahbenyomolefthebrew=1450;e.yericyrillic=1099;e.yerudieresiscyrillic=1273;e.yesieungkorean=12673;e.yesieungpansioskorean=12675;e.yesieungsioskorean=12674;e.yetivhebrew=1434;e.ygrave=7923;e.yhook=436;e.yhookabove=7927;e.yiarmenian=1397;e.yicyrillic=1111;e.yikorean=12642;e.yinyang=9775;e.yiwnarmenian=1410;e.ymonospace=65369;e.yod=1497;e.yoddagesh=64313;e.yoddageshhebrew=64313;e.yodhebrew=1497;e.yodyodhebrew=1522;e.yodyodpatahhebrew=64287;e.yohiragana=12424;e.yoikorean=12681;e.yokatakana=12520;e.yokatakanahalfwidth=65430;e.yokorean=12635;e.yosmallhiragana=12423;e.yosmallkatakana=12519;e.yosmallkatakanahalfwidth=65390;e.yotgreek=1011;e.yoyaekorean=12680;e.yoyakorean=12679;e.yoyakthai=3618;e.yoyingthai=3597;e.yparen=9396;e.ypogegrammeni=890;e.ypogegrammenigreekcmb=837;e.yr=422;e.yring=7833;e.ysuperior=696;e.ytilde=7929;e.yturned=654;e.yuhiragana=12422;e.yuikorean=12684;e.yukatakana=12518;e.yukatakanahalfwidth=65429;e.yukorean=12640;e.yusbigcyrillic=1131;e.yusbigiotifiedcyrillic=1133;e.yuslittlecyrillic=1127;e.yuslittleiotifiedcyrillic=1129;e.yusmallhiragana=12421;e.yusmallkatakana=12517;e.yusmallkatakanahalfwidth=65389;e.yuyekorean=12683;e.yuyeokorean=12682;e.yyabengali=2527;e.yyadeva=2399;e.z=122;e.zaarmenian=1382;e.zacute=378;e.zadeva=2395;e.zagurmukhi=2651;e.zaharabic=1592;e.zahfinalarabic=65222;e.zahinitialarabic=65223;e.zahiragana=12374;e.zahmedialarabic=65224;e.zainarabic=1586;e.zainfinalarabic=65200;e.zakatakana=12470;e.zaqefgadolhebrew=1429;e.zaqefqatanhebrew=1428;e.zarqahebrew=1432;e.zayin=1494;e.zayindagesh=64310;e.zayindageshhebrew=64310;e.zayinhebrew=1494;e.zbopomofo=12567;e.zcaron=382;e.zcircle=9449;e.zcircumflex=7825;e.zcurl=657;e.zdot=380;e.zdotaccent=380;e.zdotbelow=7827;e.zecyrillic=1079;e.zedescendercyrillic=1177;e.zedieresiscyrillic=1247;e.zehiragana=12380;e.zekatakana=12476;e.zero=48;e.zeroarabic=1632;e.zerobengali=2534;e.zerodeva=2406;e.zerogujarati=2790;e.zerogurmukhi=2662;e.zerohackarabic=1632;e.zeroinferior=8320;e.zeromonospace=65296;e.zerooldstyle=63280;e.zeropersian=1776;e.zerosuperior=8304;e.zerothai=3664;e.zerowidthjoiner=65279;e.zerowidthnonjoiner=8204;e.zerowidthspace=8203;e.zeta=950;e.zhbopomofo=12563;e.zhearmenian=1386;e.zhebrevecyrillic=1218;e.zhecyrillic=1078;e.zhedescendercyrillic=1175;e.zhedieresiscyrillic=1245;e.zihiragana=12376;e.zikatakana=12472;e.zinorhebrew=1454;e.zlinebelow=7829;e.zmonospace=65370;e.zohiragana=12382;e.zokatakana=12478;e.zparen=9397;e.zretroflexhook=656;e.zstroke=438;e.zuhiragana=12378;e.zukatakana=12474;e[".notdef"]=0;e.angbracketleftbig=9001;e.angbracketleftBig=9001;e.angbracketleftbigg=9001;e.angbracketleftBigg=9001;e.angbracketrightBig=9002;e.angbracketrightbig=9002;e.angbracketrightBigg=9002;e.angbracketrightbigg=9002;e.arrowhookleft=8618;e.arrowhookright=8617;e.arrowlefttophalf=8636;e.arrowleftbothalf=8637;e.arrownortheast=8599;e.arrownorthwest=8598;e.arrowrighttophalf=8640;e.arrowrightbothalf=8641;e.arrowsoutheast=8600;e.arrowsouthwest=8601;e.backslashbig=8726;e.backslashBig=8726;e.backslashBigg=8726;e.backslashbigg=8726;e.bardbl=8214;e.bracehtipdownleft=65079;e.bracehtipdownright=65079;e.bracehtipupleft=65080;e.bracehtipupright=65080;e.braceleftBig=123;e.braceleftbig=123;e.braceleftbigg=123;e.braceleftBigg=123;e.bracerightBig=125;e.bracerightbig=125;e.bracerightbigg=125;e.bracerightBigg=125;e.bracketleftbig=91;e.bracketleftBig=91;e.bracketleftbigg=91;e.bracketleftBigg=91;e.bracketrightBig=93;e.bracketrightbig=93;e.bracketrightbigg=93;e.bracketrightBigg=93;e.ceilingleftbig=8968;e.ceilingleftBig=8968;e.ceilingleftBigg=8968;e.ceilingleftbigg=8968;e.ceilingrightbig=8969;e.ceilingrightBig=8969;e.ceilingrightbigg=8969;e.ceilingrightBigg=8969;e.circledotdisplay=8857;e.circledottext=8857;e.circlemultiplydisplay=8855;e.circlemultiplytext=8855;e.circleplusdisplay=8853;e.circleplustext=8853;e.contintegraldisplay=8750;e.contintegraltext=8750;e.coproductdisplay=8720;e.coproducttext=8720;e.floorleftBig=8970;e.floorleftbig=8970;e.floorleftbigg=8970;e.floorleftBigg=8970;e.floorrightbig=8971;e.floorrightBig=8971;e.floorrightBigg=8971;e.floorrightbigg=8971;e.hatwide=770;e.hatwider=770;e.hatwidest=770;e.intercal=7488;e.integraldisplay=8747;e.integraltext=8747;e.intersectiondisplay=8898;e.intersectiontext=8898;e.logicalanddisplay=8743;e.logicalandtext=8743;e.logicalordisplay=8744;e.logicalortext=8744;e.parenleftBig=40;e.parenleftbig=40;e.parenleftBigg=40;e.parenleftbigg=40;e.parenrightBig=41;e.parenrightbig=41;e.parenrightBigg=41;e.parenrightbigg=41;e.prime=8242;e.productdisplay=8719;e.producttext=8719;e.radicalbig=8730;e.radicalBig=8730;e.radicalBigg=8730;e.radicalbigg=8730;e.radicalbt=8730;e.radicaltp=8730;e.radicalvertex=8730;e.slashbig=47;e.slashBig=47;e.slashBigg=47;e.slashbigg=47;e.summationdisplay=8721;e.summationtext=8721;e.tildewide=732;e.tildewider=732;e.tildewidest=732;e.uniondisplay=8899;e.unionmultidisplay=8846;e.unionmultitext=8846;e.unionsqdisplay=8852;e.unionsqtext=8852;e.uniontext=8899;e.vextenddouble=8741;e.vextendsingle=8739}),pr=getLookupTableFactory(function(e){e.space=32;e.a1=9985;e.a2=9986;e.a202=9987;e.a3=9988;e.a4=9742;e.a5=9990;e.a119=9991;e.a118=9992;e.a117=9993;e.a11=9755;e.a12=9758;e.a13=9996;e.a14=9997;e.a15=9998;e.a16=9999;e.a105=1e4;e.a17=10001;e.a18=10002;e.a19=10003;e.a20=10004;e.a21=10005;e.a22=10006;e.a23=10007;e.a24=10008;e.a25=10009;e.a26=10010;e.a27=10011;e.a28=10012;e.a6=10013;e.a7=10014;e.a8=10015;e.a9=10016;e.a10=10017;e.a29=10018;e.a30=10019;e.a31=10020;e.a32=10021;e.a33=10022;e.a34=10023;e.a35=9733;e.a36=10025;e.a37=10026;e.a38=10027;e.a39=10028;e.a40=10029;e.a41=10030;e.a42=10031;e.a43=10032;e.a44=10033;e.a45=10034;e.a46=10035;e.a47=10036;e.a48=10037;e.a49=10038;e.a50=10039;e.a51=10040;e.a52=10041;e.a53=10042;e.a54=10043;e.a55=10044;e.a56=10045;e.a57=10046;e.a58=10047;e.a59=10048;e.a60=10049;e.a61=10050;e.a62=10051;e.a63=10052;e.a64=10053;e.a65=10054;e.a66=10055;e.a67=10056;e.a68=10057;e.a69=10058;e.a70=10059;e.a71=9679;e.a72=10061;e.a73=9632;e.a74=10063;e.a203=10064;e.a75=10065;e.a204=10066;e.a76=9650;e.a77=9660;e.a78=9670;e.a79=10070;e.a81=9687;e.a82=10072;e.a83=10073;e.a84=10074;e.a97=10075;e.a98=10076;e.a99=10077;e.a100=10078;e.a101=10081;e.a102=10082;e.a103=10083;e.a104=10084;e.a106=10085;e.a107=10086;e.a108=10087;e.a112=9827;e.a111=9830;e.a110=9829;e.a109=9824;e.a120=9312;e.a121=9313;e.a122=9314;e.a123=9315;e.a124=9316;e.a125=9317;e.a126=9318;e.a127=9319;e.a128=9320;e.a129=9321;e.a130=10102;e.a131=10103;e.a132=10104;e.a133=10105;e.a134=10106;e.a135=10107;e.a136=10108;e.a137=10109;e.a138=10110;e.a139=10111;e.a140=10112;e.a141=10113;e.a142=10114;e.a143=10115;e.a144=10116;e.a145=10117;e.a146=10118;e.a147=10119;e.a148=10120;e.a149=10121;e.a150=10122;e.a151=10123;e.a152=10124;e.a153=10125;e.a154=10126;e.a155=10127;e.a156=10128;e.a157=10129;e.a158=10130;e.a159=10131;e.a160=10132;e.a161=8594;e.a163=8596;e.a164=8597;e.a196=10136;e.a165=10137;e.a192=10138;e.a166=10139;e.a167=10140;e.a168=10141;e.a169=10142;e.a170=10143;e.a171=10144;e.a172=10145;e.a173=10146;e.a162=10147;e.a174=10148;e.a175=10149;e.a176=10150;e.a177=10151;e.a178=10152;e.a179=10153;e.a193=10154;e.a180=10155;e.a199=10156;e.a181=10157;e.a200=10158;e.a182=10159;e.a201=10161;e.a183=10162;e.a184=10163;e.a197=10164;e.a185=10165;e.a194=10166;e.a198=10167;e.a186=10168;e.a195=10169;e.a187=10170;e.a188=10171;e.a189=10172;e.a190=10173;e.a191=10174;e.a89=10088;e.a90=10089;e.a93=10090;e.a94=10091;e.a91=10092;e.a92=10093;e.a205=10094;e.a85=10095;e.a206=10096;e.a86=10097;e.a87=10098;e.a88=10099;e.a95=10100;e.a96=10101;e[".notdef"]=0}),mr=getLookupTableFactory(function(e){e[63721]=169;e[63193]=169;e[63720]=174;e[63194]=174;e[63722]=8482;e[63195]=8482;e[63729]=9127;e[63730]=9128;e[63731]=9129;e[63740]=9131;e[63741]=9132;e[63742]=9133;e[63726]=9121;e[63727]=9122;e[63728]=9123;e[63737]=9124;e[63738]=9125;e[63739]=9126;e[63723]=9115;e[63724]=9116;e[63725]=9117;e[63734]=9118;e[63735]=9119;e[63736]=9120});function getUnicodeForGlyph(e,t){let a=t[e];if(void 0!==a)return a;if(!e)return-1;if("u"===e[0]){const t=e.length;let r;if(7===t&&"n"===e[1]&&"i"===e[2])r=e.substring(3);else{if(!(t>=5&&t<=7))return-1;r=e.substring(1)}if(r===r.toUpperCase()){a=parseInt(r,16);if(a>=0)return a}}return-1}const br=[[0,127],[128,255],[256,383],[384,591],[592,687,7424,7551,7552,7615],[688,767,42752,42783],[768,879,7616,7679],[880,1023],[11392,11519],[1024,1279,1280,1327,11744,11775,42560,42655],[1328,1423],[1424,1535],[42240,42559],[1536,1791,1872,1919],[1984,2047],[2304,2431],[2432,2559],[2560,2687],[2688,2815],[2816,2943],[2944,3071],[3072,3199],[3200,3327],[3328,3455],[3584,3711],[3712,3839],[4256,4351,11520,11567],[6912,7039],[4352,4607],[7680,7935,11360,11391,42784,43007],[7936,8191],[8192,8303,11776,11903],[8304,8351],[8352,8399],[8400,8447],[8448,8527],[8528,8591],[8592,8703,10224,10239,10496,10623,11008,11263],[8704,8959,10752,11007,10176,10223,10624,10751],[8960,9215],[9216,9279],[9280,9311],[9312,9471],[9472,9599],[9600,9631],[9632,9727],[9728,9983],[9984,10175],[12288,12351],[12352,12447],[12448,12543,12784,12799],[12544,12591,12704,12735],[12592,12687],[43072,43135],[12800,13055],[13056,13311],[44032,55215],[55296,57343],[67840,67871],[19968,40959,11904,12031,12032,12255,12272,12287,13312,19903,131072,173791,12688,12703],[57344,63743],[12736,12783,63744,64255,194560,195103],[64256,64335],[64336,65023],[65056,65071],[65040,65055],[65104,65135],[65136,65279],[65280,65519],[65520,65535],[3840,4095],[1792,1871],[1920,1983],[3456,3583],[4096,4255],[4608,4991,4992,5023,11648,11743],[5024,5119],[5120,5759],[5760,5791],[5792,5887],[6016,6143],[6144,6319],[10240,10495],[40960,42127],[5888,5919,5920,5951,5952,5983,5984,6015],[66304,66351],[66352,66383],[66560,66639],[118784,119039,119040,119295,119296,119375],[119808,120831],[1044480,1048573],[65024,65039,917760,917999],[917504,917631],[6400,6479],[6480,6527],[6528,6623],[6656,6687],[11264,11359],[11568,11647],[19904,19967],[43008,43055],[65536,65663,65664,65791,65792,65855],[65856,65935],[66432,66463],[66464,66527],[66640,66687],[66688,66735],[67584,67647],[68096,68191],[119552,119647],[73728,74751,74752,74879],[119648,119679],[7040,7103],[7168,7247],[7248,7295],[43136,43231],[43264,43311],[43312,43359],[43520,43615],[65936,65999],[66e3,66047],[66208,66271,66176,66207,67872,67903],[127024,127135,126976,127023]];function getUnicodeRangeFor(e,t=-1){if(-1!==t){const a=br[t];for(let r=0,i=a.length;r=a[r]&&e<=a[r+1])return t}for(let t=0,a=br.length;t=a[r]&&e<=a[r+1])return t}return-1}const yr=new RegExp("^(\\s)|(\\p{Mn})|(\\p{Cf})$","u"),wr=new Map;const Sr=!0,xr=1,Ar=2,kr=4,Cr=32,vr=[".notdef",".null","nonmarkingreturn","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","Adieresis","Aring","Ccedilla","Eacute","Ntilde","Odieresis","Udieresis","aacute","agrave","acircumflex","adieresis","atilde","aring","ccedilla","eacute","egrave","ecircumflex","edieresis","iacute","igrave","icircumflex","idieresis","ntilde","oacute","ograve","ocircumflex","odieresis","otilde","uacute","ugrave","ucircumflex","udieresis","dagger","degree","cent","sterling","section","bullet","paragraph","germandbls","registered","copyright","trademark","acute","dieresis","notequal","AE","Oslash","infinity","plusminus","lessequal","greaterequal","yen","mu","partialdiff","summation","product","pi","integral","ordfeminine","ordmasculine","Omega","ae","oslash","questiondown","exclamdown","logicalnot","radical","florin","approxequal","Delta","guillemotleft","guillemotright","ellipsis","nonbreakingspace","Agrave","Atilde","Otilde","OE","oe","endash","emdash","quotedblleft","quotedblright","quoteleft","quoteright","divide","lozenge","ydieresis","Ydieresis","fraction","currency","guilsinglleft","guilsinglright","fi","fl","daggerdbl","periodcentered","quotesinglbase","quotedblbase","perthousand","Acircumflex","Ecircumflex","Aacute","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Oacute","Ocircumflex","apple","Ograve","Uacute","Ucircumflex","Ugrave","dotlessi","circumflex","tilde","macron","breve","dotaccent","ring","cedilla","hungarumlaut","ogonek","caron","Lslash","lslash","Scaron","scaron","Zcaron","zcaron","brokenbar","Eth","eth","Yacute","yacute","Thorn","thorn","minus","multiply","onesuperior","twosuperior","threesuperior","onehalf","onequarter","threequarters","franc","Gbreve","gbreve","Idotaccent","Scedilla","scedilla","Cacute","cacute","Ccaron","ccaron","dcroat"];function recoverGlyphName(e,t){if(void 0!==t[e])return e;const a=getUnicodeForGlyph(e,t);if(-1!==a)for(const e in t)if(t[e]===a)return e;info("Unable to recover a standard glyph name for: "+e);return e}function type1FontGlyphMapping(e,t,a){const r=Object.create(null);let i,n,s;const o=!!(e.flags&kr);if(e.isInternalFont){s=t;for(n=0;n=0?i:0}}else if(e.baseEncodingName){s=getEncoding(e.baseEncodingName);for(n=0;n=0?i:0}}else if(o)for(n in t)r[n]=t[n];else{s=hr;for(n=0;n=0?i:0}}const c=e.differences;let l;if(c)for(n in c){const e=c[n];i=a.indexOf(e);if(-1===i){l||(l=gr());const t=recoverGlyphName(e,l);t!==e&&(i=a.indexOf(t))}r[n]=i>=0?i:0}return r}function normalizeFontName(e){return e.replaceAll(/[,_]/g,"-").replaceAll(/\s/g,"")}const Fr=getLookupTableFactory(e=>{e[8211]=65074;e[8212]=65073;e[8229]=65072;e[8230]=65049;e[12289]=65041;e[12290]=65042;e[12296]=65087;e[12297]=65088;e[12298]=65085;e[12299]=65086;e[12300]=65089;e[12301]=65090;e[12302]=65091;e[12303]=65092;e[12304]=65083;e[12305]=65084;e[12308]=65081;e[12309]=65082;e[12310]=65047;e[12311]=65048;e[65103]=65076;e[65281]=65045;e[65288]=65077;e[65289]=65078;e[65292]=65040;e[65306]=65043;e[65307]=65044;e[65311]=65046;e[65339]=65095;e[65341]=65096;e[65343]=65075;e[65371]=65079;e[65373]=65080});const Ir=[".notdef","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","endash","dagger","daggerdbl","periodcentered","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","questiondown","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","ring","cedilla","hungarumlaut","ogonek","caron","emdash","AE","ordfeminine","Lslash","Oslash","OE","ordmasculine","ae","dotlessi","lslash","oslash","oe","germandbls","onesuperior","logicalnot","mu","trademark","Eth","onehalf","plusminus","Thorn","onequarter","divide","brokenbar","degree","thorn","threequarters","twosuperior","registered","minus","eth","multiply","threesuperior","copyright","Aacute","Acircumflex","Adieresis","Agrave","Aring","Atilde","Ccedilla","Eacute","Ecircumflex","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Ntilde","Oacute","Ocircumflex","Odieresis","Ograve","Otilde","Scaron","Uacute","Ucircumflex","Udieresis","Ugrave","Yacute","Ydieresis","Zcaron","aacute","acircumflex","adieresis","agrave","aring","atilde","ccedilla","eacute","ecircumflex","edieresis","egrave","iacute","icircumflex","idieresis","igrave","ntilde","oacute","ocircumflex","odieresis","ograve","otilde","scaron","uacute","ucircumflex","udieresis","ugrave","yacute","ydieresis","zcaron"],Tr=[".notdef","space","exclamsmall","Hungarumlautsmall","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","questionsmall","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","fi","fl","ffi","ffl","parenleftinferior","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","exclamdownsmall","centoldstyle","Lslashsmall","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","Dotaccentsmall","Macronsmall","figuredash","hypheninferior","Ogoneksmall","Ringsmall","Cedillasmall","onequarter","onehalf","threequarters","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall"],Or=[".notdef","space","dollaroldstyle","dollarsuperior","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","fi","fl","ffi","ffl","parenleftinferior","parenrightinferior","hyphensuperior","colonmonetary","onefitted","rupiah","centoldstyle","figuredash","hypheninferior","onequarter","onehalf","threequarters","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior"],Dr=[".notdef","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","endash","dagger","daggerdbl","periodcentered","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","questiondown","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","ring","cedilla","hungarumlaut","ogonek","caron","emdash","AE","ordfeminine","Lslash","Oslash","OE","ordmasculine","ae","dotlessi","lslash","oslash","oe","germandbls","onesuperior","logicalnot","mu","trademark","Eth","onehalf","plusminus","Thorn","onequarter","divide","brokenbar","degree","thorn","threequarters","twosuperior","registered","minus","eth","multiply","threesuperior","copyright","Aacute","Acircumflex","Adieresis","Agrave","Aring","Atilde","Ccedilla","Eacute","Ecircumflex","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Ntilde","Oacute","Ocircumflex","Odieresis","Ograve","Otilde","Scaron","Uacute","Ucircumflex","Udieresis","Ugrave","Yacute","Ydieresis","Zcaron","aacute","acircumflex","adieresis","agrave","aring","atilde","ccedilla","eacute","ecircumflex","edieresis","egrave","iacute","icircumflex","idieresis","igrave","ntilde","oacute","ocircumflex","odieresis","ograve","otilde","scaron","uacute","ucircumflex","udieresis","ugrave","yacute","ydieresis","zcaron","exclamsmall","Hungarumlautsmall","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","commasuperior","threequartersemdash","periodsuperior","questionsmall","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","ffi","ffl","parenleftinferior","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","exclamdownsmall","centoldstyle","Lslashsmall","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","Dotaccentsmall","Macronsmall","figuredash","hypheninferior","Ogoneksmall","Ringsmall","Cedillasmall","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall","001.000","001.001","001.002","001.003","Black","Bold","Book","Light","Medium","Regular","Roman","Semibold"],Mr=391,Rr=[null,{id:"hstem",min:2,stackClearing:!0,stem:!0},null,{id:"vstem",min:2,stackClearing:!0,stem:!0},{id:"vmoveto",min:1,stackClearing:!0},{id:"rlineto",min:2,resetStack:!0},{id:"hlineto",min:1,resetStack:!0},{id:"vlineto",min:1,resetStack:!0},{id:"rrcurveto",min:6,resetStack:!0},null,{id:"callsubr",min:1},{id:"return",min:0},null,null,{id:"endchar",min:0,stackClearing:!0},null,null,null,{id:"hstemhm",min:2,stackClearing:!0,stem:!0},{id:"hintmask",min:0,stackClearing:!0},{id:"cntrmask",min:0,stackClearing:!0},{id:"rmoveto",min:2,stackClearing:!0},{id:"hmoveto",min:1,stackClearing:!0},{id:"vstemhm",min:2,stackClearing:!0,stem:!0},{id:"rcurveline",min:8,resetStack:!0},{id:"rlinecurve",min:8,resetStack:!0},{id:"vvcurveto",min:4,resetStack:!0},{id:"hhcurveto",min:4,resetStack:!0},null,{id:"callgsubr",min:1},{id:"vhcurveto",min:4,resetStack:!0},{id:"hvcurveto",min:4,resetStack:!0}],Nr=[null,null,null,{id:"and",min:2,stackDelta:-1},{id:"or",min:2,stackDelta:-1},{id:"not",min:1,stackDelta:0},null,null,null,{id:"abs",min:1,stackDelta:0},{id:"add",min:2,stackDelta:-1,stackFn(e,t){e[t-2]=e[t-2]+e[t-1]}},{id:"sub",min:2,stackDelta:-1,stackFn(e,t){e[t-2]=e[t-2]-e[t-1]}},{id:"div",min:2,stackDelta:-1,stackFn(e,t){e[t-2]=e[t-2]/e[t-1]}},null,{id:"neg",min:1,stackDelta:0,stackFn(e,t){e[t-1]=-e[t-1]}},{id:"eq",min:2,stackDelta:-1},null,null,{id:"drop",min:1,stackDelta:-1},null,{id:"put",min:2,stackDelta:-2},{id:"get",min:1,stackDelta:0},{id:"ifelse",min:4,stackDelta:-3},{id:"random",min:0,stackDelta:1},{id:"mul",min:2,stackDelta:-1,stackFn(e,t){e[t-2]=e[t-2]*e[t-1]}},null,{id:"sqrt",min:1,stackDelta:0},{id:"dup",min:1,stackDelta:1},{id:"exch",min:2,stackDelta:0},{id:"index",min:2,stackDelta:0},{id:"roll",min:3,stackDelta:-2},null,null,null,{id:"hflex",min:7,resetStack:!0},{id:"flex",min:13,resetStack:!0},{id:"hflex1",min:9,resetStack:!0},{id:"flex1",min:11,resetStack:!0}];class CFFParser{constructor(e,t,a){this.bytes=e.getBytes();this.properties=t;this.seacAnalysisEnabled=!!a}parse(){const e=this.properties,t=new CFF;this.cff=t;const a=this.parseHeader(),r=this.parseIndex(a.endPos),i=this.parseIndex(r.endPos),n=this.parseIndex(i.endPos),s=this.parseIndex(n.endPos),o=this.parseDict(i.obj.get(0)),c=this.createDict(CFFTopDict,o,t.strings);t.header=a.obj;t.names=this.parseNameIndex(r.obj);t.strings=this.parseStringIndex(n.obj);t.topDict=c;t.globalSubrIndex=s.obj;this.parsePrivateDict(t.topDict);t.isCIDFont=c.hasName("ROS");const l=c.getByName("CharStrings"),h=this.parseIndex(l).obj;t.charStringCount=h.count;const u=c.getByName("FontMatrix");u&&(e.fontMatrix=u);const d=c.getByName("FontBBox");if(d){e.ascent=Math.max(d[3],d[1]);e.descent=Math.min(d[1],d[3]);e.ascentScaled=!0}let f,g;if(t.isCIDFont){const e=this.parseIndex(c.getByName("FDArray")).obj;for(let a=0,r=e.count;a=t)throw new FormatError("Invalid CFF header");if(0!==a){info("cff data is shifted");e=e.subarray(a);this.bytes=e}const r=e[0],i=e[1],n=e[2],s=e[3];return{obj:new CFFHeader(r,i,n,s),endPos:n}}parseDict(e){let t=0;function parseOperand(){let a=e[t++];if(30===a)return function parseFloatOperand(){let a="";const r=15,i=["0","1","2","3","4","5","6","7","8","9",".","E","E-",null,"-"],n=e.length;for(;t>4,o=15&n;if(s===r)break;a+=i[s];if(o===r)break;a+=i[o]}return parseFloat(a)}();if(28===a){a=readInt16(e,t);t+=2;return a}if(29===a){a=e[t++];a=a<<8|e[t++];a=a<<8|e[t++];a=a<<8|e[t++];return a}if(a>=32&&a<=246)return a-139;if(a>=247&&a<=250)return 256*(a-247)+e[t++]+108;if(a>=251&&a<=254)return-256*(a-251)-e[t++]-108;warn('CFFParser_parseDict: "'+a+'" is a reserved command.');return NaN}let a=[];const r=[];t=0;const i=e.length;for(;t10)return!1;let i=e.stackSize;const n=e.stack;let s=t.length;for(let o=0;o=4){i-=4;if(this.seacAnalysisEnabled){e.seac=n.slice(i,i+4);return!1}}l=Rr[c]}else if(c>=32&&c<=246){n[i]=c-139;i++}else if(c>=247&&c<=254){n[i]=c<251?(c-247<<8)+t[o]+108:-(c-251<<8)-t[o]-108;o++;i++}else if(255===c){n[i]=(t[o]<<24|t[o+1]<<16|t[o+2]<<8|t[o+3])/65536;o+=4;i++}else if(19===c||20===c){e.hints+=i>>1;if(0===e.hints){t.copyWithin(o-1,o,-1);o-=1;s-=1;continue}o+=e.hints+7>>3;i%=2;l=Rr[c]}else{if(10===c||29===c){const t=10===c?a:r;if(!t){l=Rr[c];warn("Missing subrsIndex for "+l.id);return!1}let s=32768;t.count<1240?s=107:t.count<33900&&(s=1131);const o=n[--i]+s;if(o<0||o>=t.count||isNaN(o)){l=Rr[c];warn("Out of bounds subrIndex for "+l.id);return!1}e.stackSize=i;e.callDepth++;if(!this.parseCharString(e,t.get(o),a,r))return!1;e.callDepth--;i=e.stackSize;continue}if(11===c){e.stackSize=i;return!0}if(0===c&&o===t.length){t[o-1]=14;l=Rr[14]}else{if(9===c){t.copyWithin(o-1,o,-1);o-=1;s-=1;continue}l=Rr[c]}}if(l){if(l.stem){e.hints+=i>>1;if(3===c||23===c)e.hasVStems=!0;else if(e.hasVStems&&(1===c||18===c)){warn("CFF stem hints are in wrong order");t[o-1]=1===c?3:23}}if(i=2&&l.stem?i%=2:i>1&&warn("Found too many parameters for stack-clearing command");i>0&&(e.width=n[i-1])}if("stackDelta"in l){"stackFn"in l&&l.stackFn(n,i);i+=l.stackDelta}else(l.stackClearing||l.resetStack)&&(i=0)}}s=i.length){warn("Invalid fd index for glyph index.");u=!1}if(u){f=i[e].privateDict;d=f.subrsIndex}}else t&&(d=t);u&&(u=this.parseCharString(h,c,d,a));if(null!==h.width){const e=f.getByName("nominalWidthX");o[l]=e+h.width}else{const e=f.getByName("defaultWidthX");o[l]=e}null!==h.seac&&(s[l]=h.seac);u||e.set(l,new Uint8Array([14]))}return{charStrings:e,seacs:s,widths:o}}emptyPrivateDictionary(e){const t=this.createDict(CFFPrivateDict,[],e.strings);e.setByKey(18,[0,0]);e.privateDict=t}parsePrivateDict(e){if(!e.hasName("Private")){this.emptyPrivateDictionary(e);return}const t=e.getByName("Private");if(!Array.isArray(t)||2!==t.length){e.removeByName("Private");return}const a=t[0],r=t[1];if(0===a||r>=this.bytes.length){this.emptyPrivateDictionary(e);return}const i=r+a,n=this.bytes.subarray(r,i),s=this.parseDict(n),o=this.createDict(CFFPrivateDict,s,e.strings);e.privateDict=o;0===o.getByName("ExpansionFactor")&&o.setByName("ExpansionFactor",.06);if(!o.getByName("Subrs"))return;const c=o.getByName("Subrs"),l=r+c;if(0===c||l>=this.bytes.length){this.emptyPrivateDictionary(e);return}const h=this.parseIndex(l);o.subrsIndex=h.obj}parseCharsets(e,t,a,r){if(0===e)return new CFFCharset(!0,Lr.ISO_ADOBE,Ir);if(1===e)return new CFFCharset(!0,Lr.EXPERT,Tr);if(2===e)return new CFFCharset(!0,Lr.EXPERT_SUBSET,Or);const i=this.bytes,n=e,s=i[e++],o=[r?0:".notdef"];let c,l,h;t-=1;switch(s){case 0:for(h=0;h=65535){warn("Not enough space in charstrings to duplicate first glyph.");return}const e=this.charStrings.get(0);this.charStrings.add(e);this.isCIDFont&&this.fdSelect.fdSelect.push(this.fdSelect.fdSelect[0])}hasGlyphId(e){if(e<0||e>=this.charStrings.count)return!1;return this.charStrings.get(e).length>0}}class CFFHeader{constructor(e,t,a,r){this.major=e;this.minor=t;this.hdrSize=a;this.offSize=r}}class CFFStrings{constructor(){this.strings=[]}get(e){return e>=0&&e<=390?Dr[e]:e-Mr<=this.strings.length?this.strings[e-Mr]:Dr[0]}getSID(e){let t=Dr.indexOf(e);if(-1!==t)return t;t=this.strings.indexOf(e);return-1!==t?t+Mr:-1}add(e){this.strings.push(e)}get count(){return this.strings.length}}class CFFIndex{constructor(){this.objects=[];this.length=0}add(e){this.length+=e.length;this.objects.push(e)}set(e,t){this.length+=t.length-this.objects[e].length;this.objects[e]=t}get(e){return this.objects[e]}get count(){return this.objects.length}}class CFFDict{constructor(e,t){this.keyToNameMap=e.keyToNameMap;this.nameToKeyMap=e.nameToKeyMap;this.defaults=e.defaults;this.types=e.types;this.opcodes=e.opcodes;this.order=e.order;this.strings=t;this.values=Object.create(null)}setByKey(e,t){if(!(e in this.keyToNameMap))return!1;if(0===t.length)return!0;for(const a of t)if(isNaN(a)){warn(`Invalid CFFDict value: "${t}" for key "${e}".`);return!0}const a=this.types[e];"num"!==a&&"sid"!==a&&"offset"!==a||(t=t[0]);this.values[e]=t;return!0}setByName(e,t){if(!(e in this.nameToKeyMap))throw new FormatError(`Invalid dictionary name "${e}"`);this.values[this.nameToKeyMap[e]]=t}hasName(e){return this.nameToKeyMap[e]in this.values}getByName(e){if(!(e in this.nameToKeyMap))throw new FormatError(`Invalid dictionary name ${e}"`);const t=this.nameToKeyMap[e];return t in this.values?this.values[t]:this.defaults[t]}removeByName(e){delete this.values[this.nameToKeyMap[e]]}static createTables(e){const t={keyToNameMap:{},nameToKeyMap:{},defaults:{},types:{},opcodes:{},order:[]};for(const a of e){const e=Array.isArray(a[0])?(a[0][0]<<8)+a[0][1]:a[0];t.keyToNameMap[e]=a[1];t.nameToKeyMap[a[1]]=e;t.types[e]=a[2];t.defaults[e]=a[3];t.opcodes[e]=Array.isArray(a[0])?a[0]:[a[0]];t.order.push(e)}return t}}const Pr=[[[12,30],"ROS",["sid","sid","num"],null],[[12,20],"SyntheticBase","num",null],[0,"version","sid",null],[1,"Notice","sid",null],[[12,0],"Copyright","sid",null],[2,"FullName","sid",null],[3,"FamilyName","sid",null],[4,"Weight","sid",null],[[12,1],"isFixedPitch","num",0],[[12,2],"ItalicAngle","num",0],[[12,3],"UnderlinePosition","num",-100],[[12,4],"UnderlineThickness","num",50],[[12,5],"PaintType","num",0],[[12,6],"CharstringType","num",2],[[12,7],"FontMatrix",["num","num","num","num","num","num"],[.001,0,0,.001,0,0]],[13,"UniqueID","num",null],[5,"FontBBox",["num","num","num","num"],[0,0,0,0]],[[12,8],"StrokeWidth","num",0],[14,"XUID","array",null],[15,"charset","offset",0],[16,"Encoding","offset",0],[17,"CharStrings","offset",0],[18,"Private",["offset","offset"],null],[[12,21],"PostScript","sid",null],[[12,22],"BaseFontName","sid",null],[[12,23],"BaseFontBlend","delta",null],[[12,31],"CIDFontVersion","num",0],[[12,32],"CIDFontRevision","num",0],[[12,33],"CIDFontType","num",0],[[12,34],"CIDCount","num",8720],[[12,35],"UIDBase","num",null],[[12,37],"FDSelect","offset",null],[[12,36],"FDArray","offset",null],[[12,38],"FontName","sid",null]];class CFFTopDict extends CFFDict{static get tables(){return shadow(this,"tables",this.createTables(Pr))}constructor(e){super(CFFTopDict.tables,e);this.privateDict=null}}const Er=[[6,"BlueValues","delta",null],[7,"OtherBlues","delta",null],[8,"FamilyBlues","delta",null],[9,"FamilyOtherBlues","delta",null],[[12,9],"BlueScale","num",.039625],[[12,10],"BlueShift","num",7],[[12,11],"BlueFuzz","num",1],[10,"StdHW","num",null],[11,"StdVW","num",null],[[12,12],"StemSnapH","delta",null],[[12,13],"StemSnapV","delta",null],[[12,14],"ForceBold","num",0],[[12,17],"LanguageGroup","num",0],[[12,18],"ExpansionFactor","num",.06],[[12,19],"initialRandomSeed","num",0],[20,"defaultWidthX","num",0],[21,"nominalWidthX","num",0],[19,"Subrs","offset",null]];class CFFPrivateDict extends CFFDict{static get tables(){return shadow(this,"tables",this.createTables(Er))}constructor(e){super(CFFPrivateDict.tables,e);this.subrsIndex=null}}const Lr={ISO_ADOBE:0,EXPERT:1,EXPERT_SUBSET:2};class CFFCharset{constructor(e,t,a,r){this.predefined=e;this.format=t;this.charset=a;this.raw=r}}class CFFEncoding{constructor(e,t,a,r){this.predefined=e;this.format=t;this.encoding=a;this.raw=r}}class CFFFDSelect{constructor(e,t){this.format=e;this.fdSelect=t}getFDIndex(e){return e<0||e>=this.fdSelect.length?-1:this.fdSelect[e]}}class CFFOffsetTracker{constructor(){this.offsets=Object.create(null)}isTracking(e){return e in this.offsets}track(e,t){if(e in this.offsets)throw new FormatError(`Already tracking location of ${e}`);this.offsets[e]=t}offset(e){for(const t in this.offsets)this.offsets[t]+=e}setEntryLocation(e,t,a){if(!(e in this.offsets))throw new FormatError(`Not tracking location of ${e}`);const r=a.data,i=this.offsets[e];for(let e=0,a=t.length;e>24&255;r[s]=l>>16&255;r[o]=l>>8&255;r[c]=255&l}}}class CFFCompiler{constructor(e){this.cff=e}compile(){const e=this.cff,t={data:[],length:0,add(e){try{this.data.push(...e)}catch{this.data=this.data.concat(e)}this.length=this.data.length}},a=this.compileHeader(e.header);t.add(a);const r=this.compileNameIndex(e.names);t.add(r);if(e.isCIDFont&&e.topDict.hasName("FontMatrix")){const t=e.topDict.getByName("FontMatrix");e.topDict.removeByName("FontMatrix");for(const a of e.fdArray){let e=t.slice(0);a.hasName("FontMatrix")&&(e=Util.transform(e,a.getByName("FontMatrix")));a.setByName("FontMatrix",e)}}const i=e.topDict.getByName("XUID");i?.length>16&&e.topDict.removeByName("XUID");e.topDict.setByName("charset",0);let n=this.compileTopDicts([e.topDict],t.length,e.isCIDFont);t.add(n.output);const s=n.trackers[0],o=this.compileStringIndex(e.strings.strings);t.add(o);const c=this.compileIndex(e.globalSubrIndex);t.add(c);if(e.encoding&&e.topDict.hasName("Encoding"))if(e.encoding.predefined)s.setEntryLocation("Encoding",[e.encoding.format],t);else{const a=this.compileEncoding(e.encoding);s.setEntryLocation("Encoding",[t.length],t);t.add(a)}const l=this.compileCharset(e.charset,e.charStrings.count,e.strings,e.isCIDFont);s.setEntryLocation("charset",[t.length],t);t.add(l);const h=this.compileCharStrings(e.charStrings);s.setEntryLocation("CharStrings",[t.length],t);t.add(h);if(e.isCIDFont){s.setEntryLocation("FDSelect",[t.length],t);const a=this.compileFDSelect(e.fdSelect);t.add(a);n=this.compileTopDicts(e.fdArray,t.length,!0);s.setEntryLocation("FDArray",[t.length],t);t.add(n.output);const r=n.trackers;this.compilePrivateDicts(e.fdArray,r,t)}this.compilePrivateDicts([e.topDict],[s],t);t.add([0]);return t.data}encodeNumber(e){return Number.isInteger(e)?this.encodeInteger(e):this.encodeFloat(e)}static get EncodeFloatRegExp(){return shadow(this,"EncodeFloatRegExp",/\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/)}encodeFloat(e){let t=e.toString();const a=CFFCompiler.EncodeFloatRegExp.exec(t);if(a){const r=parseFloat("1e"+((a[2]?+a[2]:0)+a[1].length));t=(Math.round(e*r)/r).toString()}let r,i,n="";for(r=0,i=t.length;r=-107&&e<=107?[e+139]:e>=108&&e<=1131?[247+((e-=108)>>8),255&e]:e>=-1131&&e<=-108?[251+((e=-e-108)>>8),255&e]:e>=-32768&&e<=32767?[28,e>>8&255,255&e]:[29,e>>24&255,e>>16&255,e>>8&255,255&e];return t}compileHeader(e){return[e.major,e.minor,4,e.offSize]}compileNameIndex(e){const t=new CFFIndex;for(const a of e){const e=Math.min(a.length,127);let r=new Array(e);for(let t=0;t"~"||"["===e||"]"===e||"("===e||")"===e||"{"===e||"}"===e||"<"===e||">"===e||"/"===e||"%"===e)&&(e="_");r[t]=e}r=r.join("");""===r&&(r="Bad_Font_Name");t.add(stringToBytes(r))}return this.compileIndex(t)}compileTopDicts(e,t,a){const r=[];let i=new CFFIndex;for(const n of e){if(a){n.removeByName("CIDFontVersion");n.removeByName("CIDFontRevision");n.removeByName("CIDFontType");n.removeByName("CIDCount");n.removeByName("UIDBase")}const e=new CFFOffsetTracker,s=this.compileDict(n,e);r.push(e);i.add(s);e.offset(t)}i=this.compileIndex(i,r);return{trackers:r,output:i}}compilePrivateDicts(e,t,a){for(let r=0,i=e.length;r>8&255,255&e])}else{i=new Uint8Array(1+2*n);i[0]=0;let t=0;const r=e.charset.length;let s=!1;for(let n=1;n>8&255;i[n+1]=255&o}}return this.compileTypedArray(i)}compileEncoding(e){return this.compileTypedArray(e.raw)}compileFDSelect(e){const t=e.format;let a,r;switch(t){case 0:a=new Uint8Array(1+e.fdSelect.length);a[0]=t;for(r=0;r>8&255,255&i,n];for(r=1;r>8&255,255&r,t);n=t}}const o=(s.length-3)/3;s[1]=o>>8&255;s[2]=255&o;s.push(r>>8&255,255&r);a=new Uint8Array(s)}return this.compileTypedArray(a)}compileTypedArray(e){return Array.from(e)}compileIndex(e,t=[]){const a=e.objects,r=a.length;if(0===r)return[0,0];const i=[r>>8&255,255&r];let n,s,o=1;for(n=0;n>8&255,255&c):3===s?i.push(c>>16&255,c>>8&255,255&c):i.push(c>>>24&255,c>>16&255,c>>8&255,255&c);a[n]&&(c+=a[n].length)}for(n=0;n=this.firstChar&&e<=this.lastChar?e:-1}amend(e){unreachable("Should not call amend()")}}class CFFFont{constructor(e,t){this.properties=t;const a=new CFFParser(e,t,Sr);this.cff=a.parse();this.cff.duplicateFirstGlyph();const r=new CFFCompiler(this.cff);this.seacs=this.cff.seacs;try{this.data=r.compile()}catch{warn("Failed to compile font "+t.loadedName);this.data=e}this._createBuiltInEncoding()}get numGlyphs(){return this.cff.charStrings.count}getCharset(){return this.cff.charset.charset}getGlyphMapping(){const e=this.cff,t=this.properties,{cidToGidMap:a,cMap:r}=t,i=e.charset.charset;let n,s;if(t.composite){let t,o;if(a?.length>0){t=Object.create(null);for(let e=0,r=a.length;e=0){const r=a[t];r&&(i[e]=r)}}i.length>0&&(this.properties.builtInEncoding=i)}}function getFloat214(e,t){return readInt16(e,t)/16384}function getSubroutineBias(e){const t=e.length;let a=32768;t<1240?a=107:t<33900&&(a=1131);return a}function parseCmap(e,t,a){const r=1===readUint16(e,t+2)?readUint32(e,t+8):readUint32(e,t+16),i=readUint16(e,t+r);let n,s,o;if(4===i){readUint16(e,t+r+2);const a=readUint16(e,t+r+6)>>1;s=t+r+14;n=[];for(o=0;o>1;a0;)h.push({flags:n})}for(a=0;a>1;y=!0;break;case 4:s+=i.pop();moveTo(n,s);y=!0;break;case 5:for(;i.length>0;){n+=i.shift();s+=i.shift();lineTo(n,s)}break;case 6:for(;i.length>0;){n+=i.shift();lineTo(n,s);if(0===i.length)break;s+=i.shift();lineTo(n,s)}break;case 7:for(;i.length>0;){s+=i.shift();lineTo(n,s);if(0===i.length)break;n+=i.shift();lineTo(n,s)}break;case 8:for(;i.length>0;){l=n+i.shift();u=s+i.shift();h=l+i.shift();d=u+i.shift();n=h+i.shift();s=d+i.shift();bezierCurveTo(l,u,h,d,n,s)}break;case 10:m=i.pop();b=null;if(a.isCFFCIDFont){const e=a.fdSelect.getFDIndex(r);if(e>=0&&eMath.abs(s-t)?n+=i.shift():s+=i.shift();bezierCurveTo(l,u,h,d,n,s);break;default:throw new FormatError(`unknown operator: 12 ${w}`)}break;case 14:if(i.length>=4){const e=i.pop(),r=i.pop();s=i.pop();n=i.pop();t.save();t.translate(n,s);let o=lookupCmap(a.cmap,String.fromCharCode(a.glyphNameMap[hr[e]]));compileCharString(a.glyphs[o.glyphId],t,a,o.glyphId);t.restore();o=lookupCmap(a.cmap,String.fromCharCode(a.glyphNameMap[hr[r]]));compileCharString(a.glyphs[o.glyphId],t,a,o.glyphId)}return;case 19:case 20:o+=i.length>>1;c+=o+7>>3;y=!0;break;case 21:s+=i.pop();n+=i.pop();moveTo(n,s);y=!0;break;case 22:n+=i.pop();moveTo(n,s);y=!0;break;case 24:for(;i.length>2;){l=n+i.shift();u=s+i.shift();h=l+i.shift();d=u+i.shift();n=h+i.shift();s=d+i.shift();bezierCurveTo(l,u,h,d,n,s)}n+=i.shift();s+=i.shift();lineTo(n,s);break;case 25:for(;i.length>6;){n+=i.shift();s+=i.shift();lineTo(n,s)}l=n+i.shift();u=s+i.shift();h=l+i.shift();d=u+i.shift();n=h+i.shift();s=d+i.shift();bezierCurveTo(l,u,h,d,n,s);break;case 26:i.length%2&&(n+=i.shift());for(;i.length>0;){l=n;u=s+i.shift();h=l+i.shift();d=u+i.shift();n=h;s=d+i.shift();bezierCurveTo(l,u,h,d,n,s)}break;case 27:i.length%2&&(s+=i.shift());for(;i.length>0;){l=n+i.shift();u=s;h=l+i.shift();d=u+i.shift();n=h+i.shift();s=d;bezierCurveTo(l,u,h,d,n,s)}break;case 28:i.push(readInt16(e,c));c+=2;break;case 29:m=i.pop()+a.gsubrsBias;b=a.gsubrs[m];b&&parse(b);break;case 30:for(;i.length>0;){l=n;u=s+i.shift();h=l+i.shift();d=u+i.shift();n=h+i.shift();s=d+(1===i.length?i.shift():0);bezierCurveTo(l,u,h,d,n,s);if(0===i.length)break;l=n+i.shift();u=s;h=l+i.shift();d=u+i.shift();s=d+i.shift();n=h+(1===i.length?i.shift():0);bezierCurveTo(l,u,h,d,n,s)}break;case 31:for(;i.length>0;){l=n+i.shift();u=s;h=l+i.shift();d=u+i.shift();s=d+i.shift();n=h+(1===i.length?i.shift():0);bezierCurveTo(l,u,h,d,n,s);if(0===i.length)break;l=n;u=s+i.shift();h=l+i.shift();d=u+i.shift();n=h+i.shift();s=d+(1===i.length?i.shift():0);bezierCurveTo(l,u,h,d,n,s)}break;default:if(w<32)throw new FormatError(`unknown operator: ${w}`);if(w<247)i.push(w-139);else if(w<251)i.push(256*(w-247)+e[c++]+108);else if(w<255)i.push(256*-(w-251)-e[c++]-108);else{i.push((e[c]<<24|e[c+1]<<16|e[c+2]<<8|e[c+3])/65536);c+=4}}y&&(i.length=0)}}(e)}class Commands{cmds=[];transformStack=[];currentTransform=[1,0,0,1,0,0];add(e,t){if(t){const{currentTransform:a}=this;for(let e=0,r=t.length;e=0&&e2*readUint16(e,t)}const n=[];let s=i(t,0);for(let a=r;ae.getSize()+3&-4))}write(){const e=this.getSize(),t=new DataView(new ArrayBuffer(e)),a=e>131070,r=a?4:2,i=new DataView(new ArrayBuffer((this.glyphs.length+1)*r));a?i.setUint32(0,0):i.setUint16(0,0);let n=0,s=0;for(const e of this.glyphs){n+=e.write(n,t);n=n+3&-4;s+=r;a?i.setUint32(s,n):i.setUint16(s,n>>1)}return{isLocationLong:a,loca:new Uint8Array(i.buffer),glyf:new Uint8Array(t.buffer)}}scale(e){for(let t=0,a=this.glyphs.length;te.getSize()));return this.header.getSize()+e}write(e,t){if(!this.header)return 0;const a=e;e+=this.header.write(e,t);if(this.simple)e+=this.simple.write(e,t);else for(const a of this.composites)e+=a.write(e,t);return e-a}scale(e){if(!this.header)return;const t=(this.header.xMin+this.header.xMax)/2;this.header.scale(t,e);if(this.simple)this.simple.scale(t,e);else for(const a of this.composites)a.scale(t,e)}}class GlyphHeader{constructor({numberOfContours:e,xMin:t,yMin:a,xMax:r,yMax:i}){this.numberOfContours=e;this.xMin=t;this.yMin=a;this.xMax=r;this.yMax=i}static parse(e,t){return[10,new GlyphHeader({numberOfContours:t.getInt16(e),xMin:t.getInt16(e+2),yMin:t.getInt16(e+4),xMax:t.getInt16(e+6),yMax:t.getInt16(e+8)})]}getSize(){return 10}write(e,t){t.setInt16(e,this.numberOfContours);t.setInt16(e+2,this.xMin);t.setInt16(e+4,this.yMin);t.setInt16(e+6,this.xMax);t.setInt16(e+8,this.yMax);return 10}scale(e,t){this.xMin=Math.round(e+(this.xMin-e)*t);this.xMax=Math.round(e+(this.xMax-e)*t)}}class Contour{constructor({flags:e,xCoordinates:t,yCoordinates:a}){this.xCoordinates=t;this.yCoordinates=a;this.flags=e}}class SimpleGlyph{constructor({contours:e,instructions:t}){this.contours=e;this.instructions=t}static parse(e,t,a){const r=[];for(let i=0;i255?e+=2:o>0&&(e+=1);t=n;o=Math.abs(s-a);o>255?e+=2:o>0&&(e+=1);a=s}}return e}write(e,t){const a=e,r=[],i=[],n=[];let s=0,o=0;for(const a of this.contours){for(let e=0,t=a.xCoordinates.length;e=0?18:2;r.push(e)}else r.push(l)}s=c;const h=a.yCoordinates[e];l=h-o;if(0===l){t|=32;i.push(0)}else{const e=Math.abs(l);if(e<=255){t|=l>=0?36:4;i.push(e)}else i.push(l)}o=h;n.push(t)}t.setUint16(e,r.length-1);e+=2}t.setUint16(e,this.instructions.length);e+=2;if(this.instructions.length){new Uint8Array(t.buffer,0,t.buffer.byteLength).set(this.instructions,e);e+=this.instructions.length}for(const a of n)t.setUint8(e++,a);for(let a=0,i=r.length;a=-128&&this.argument1<=127&&this.argument2>=-128&&this.argument2<=127||(e+=2):this.argument1>=0&&this.argument1<=255&&this.argument2>=0&&this.argument2<=255||(e+=2);return e}write(e,t){const a=e;2&this.flags?this.argument1>=-128&&this.argument1<=127&&this.argument2>=-128&&this.argument2<=127||(this.flags|=1):this.argument1>=0&&this.argument1<=255&&this.argument2>=0&&this.argument2<=255||(this.flags|=1);t.setUint16(e,this.flags);t.setUint16(e+2,this.glyphIndex);e+=4;if(1&this.flags){if(2&this.flags){t.setInt16(e,this.argument1);t.setInt16(e+2,this.argument2)}else{t.setUint16(e,this.argument1);t.setUint16(e+2,this.argument2)}e+=4}else{t.setUint8(e,this.argument1);t.setUint8(e+1,this.argument2);e+=2}if(256&this.flags){t.setUint16(e,this.instructions.length);e+=2;if(this.instructions.length){new Uint8Array(t.buffer,0,t.buffer.byteLength).set(this.instructions,e);e+=this.instructions.length}}return e-a}scale(e,t){}}function writeInt16(e,t,a){e[t]=a>>8&255;e[t+1]=255&a}function writeInt32(e,t,a){e[t]=a>>24&255;e[t+1]=a>>16&255;e[t+2]=a>>8&255;e[t+3]=255&a}function writeData(e,t,a){if(a instanceof Uint8Array)e.set(a,t);else if("string"==typeof a)for(let r=0,i=a.length;ra;){a<<=1;r++}const i=a*t;return{range:i,entry:r,rangeShift:t*e-i}}toArray(){let e=this.sfnt;const t=this.tables,a=Object.keys(t);a.sort();const r=a.length;let i,n,s,o,c,l=12+16*r;const h=[l];for(i=0;i>>0;h.push(l)}const u=new Uint8Array(l);for(i=0;i>>0}writeInt32(u,l+4,e);writeInt32(u,l+8,h[i]);writeInt32(u,l+12,t[c].length);l+=16}return u}addTable(e,t){if(e in this.tables)throw new Error("Table "+e+" already exists");this.tables[e]=t}}const Vr=[4],Kr=[5],Jr=[6],Yr=[7],Zr=[8],Qr=[12,35],ei=[14],ti=[21],ai=[22],ri=[30],ii=[31];class Type1CharString{constructor(){this.width=0;this.lsb=0;this.flexing=!1;this.output=[];this.stack=[]}convert(e,t,a){const r=e.length;let i,n,s,o=!1;for(let c=0;cr)return!0;const i=r-e;for(let e=i;e>8&255,255&t);else{t=65536*t|0;this.output.push(255,t>>24&255,t>>16&255,t>>8&255,255&t)}}this.output.push(...t);a?this.stack.splice(i,e):this.stack.length=0;return!1}}function isHexDigit(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}function decrypt(e,t,a){if(a>=e.length)return new Uint8Array(0);let r,i,n=0|t;for(r=0;r>8;n=52845*(t+n)+22719&65535}return o}function isSpecial(e){return 47===e||91===e||93===e||123===e||125===e||40===e||41===e}class Type1Parser{constructor(e,t,a){if(t){const t=e.getBytes(),a=!((isHexDigit(t[0])||isWhiteSpace(t[0]))&&isHexDigit(t[1])&&isHexDigit(t[2])&&isHexDigit(t[3])&&isHexDigit(t[4])&&isHexDigit(t[5])&&isHexDigit(t[6])&&isHexDigit(t[7]));e=new Stream(a?decrypt(t,55665,4):function decryptAscii(e,t,a){let r=0|t;const i=e.length,n=new Uint8Array(i>>>1);let s,o;for(s=0,o=0;s>8;r=52845*(e+r)+22719&65535}}return n.slice(a,o)}(t,55665,4))}this.seacAnalysisEnabled=!!a;this.stream=e;this.nextChar()}readNumberArray(){this.getToken();const e=[];for(;;){const t=this.getToken();if(null===t||"]"===t||"}"===t)break;e.push(parseFloat(t||0))}return e}readNumber(){const e=this.getToken();return parseFloat(e||0)}readInt(){const e=this.getToken();return 0|parseInt(e||0,10)}readBoolean(){return"true"===this.getToken()?1:0}nextChar(){return this.currentChar=this.stream.getByte()}prevChar(){this.stream.skip(-2);return this.currentChar=this.stream.getByte()}getToken(){let e=!1,t=this.currentChar;for(;;){if(-1===t)return null;if(e)10!==t&&13!==t||(e=!1);else if(37===t)e=!0;else if(!isWhiteSpace(t))break;t=this.nextChar()}if(isSpecial(t)){this.nextChar();return String.fromCharCode(t)}let a="";do{a+=String.fromCharCode(t);t=this.nextChar()}while(t>=0&&!isWhiteSpace(t)&&!isSpecial(t));return a}readCharStrings(e,t){return-1===t?e:decrypt(e,4330,t)}extractFontProgram(e){const t=this.stream,a=[],r=[],i=Object.create(null);i.lenIV=4;const n={subrs:[],charstrings:[],properties:{privateData:i}};let s,o,c,l;for(;null!==(s=this.getToken());)if("/"===s){s=this.getToken();switch(s){case"CharStrings":this.getToken();this.getToken();this.getToken();this.getToken();for(;;){s=this.getToken();if(null===s||"end"===s)break;if("/"!==s)continue;const e=this.getToken();o=this.readInt();this.getToken();c=o>0?t.getBytes(o):new Uint8Array(0);l=n.properties.privateData.lenIV;const a=this.readCharStrings(c,l);this.nextChar();s=this.getToken();"noaccess"===s?this.getToken():"/"===s&&this.prevChar();r.push({glyph:e,encoded:a})}break;case"Subrs":this.readInt();this.getToken();for(;"dup"===this.getToken();){const e=this.readInt();o=this.readInt();this.getToken();c=o>0?t.getBytes(o):new Uint8Array(0);l=n.properties.privateData.lenIV;const r=this.readCharStrings(c,l);this.nextChar();s=this.getToken();"noaccess"===s&&this.getToken();a[e]=r}break;case"BlueValues":case"OtherBlues":case"FamilyBlues":case"FamilyOtherBlues":const e=this.readNumberArray();e.length>0&&e.length,0;break;case"StemSnapH":case"StemSnapV":n.properties.privateData[s]=this.readNumberArray();break;case"StdHW":case"StdVW":n.properties.privateData[s]=this.readNumberArray()[0];break;case"BlueShift":case"lenIV":case"BlueFuzz":case"BlueScale":case"LanguageGroup":n.properties.privateData[s]=this.readNumber();break;case"ExpansionFactor":n.properties.privateData[s]=this.readNumber()||.06;break;case"ForceBold":n.properties.privateData[s]=this.readBoolean()}}for(const{encoded:t,glyph:i}of r){const r=new Type1CharString,s=r.convert(t,a,this.seacAnalysisEnabled);let o=r.output;s&&(o=[14]);const c={glyphName:i,charstring:o,width:r.width,lsb:r.lsb,seac:r.seac};".notdef"===i?n.charstrings.unshift(c):n.charstrings.push(c);if(e.builtInEncoding){const t=e.builtInEncoding.indexOf(i);t>-1&&void 0===e.widths[t]&&t>=e.firstChar&&t<=e.lastChar&&(e.widths[t]=r.width)}}return n}extractFontHeader(e){let t;for(;null!==(t=this.getToken());)if("/"===t){t=this.getToken();switch(t){case"FontMatrix":const a=this.readNumberArray();e.fontMatrix=a;break;case"Encoding":const r=this.getToken();let i;if(/^\d+$/.test(r)){i=[];const e=0|parseInt(r,10);this.getToken();for(let a=0;a=i){s+=a;for(;s=0&&(r[e]=i)}}return type1FontGlyphMapping(e,r,a)}hasGlyphId(e){if(e<0||e>=this.numGlyphs)return!1;if(0===e)return!0;return this.charstrings[e-1].charstring.length>0}getSeacs(e){const t=[];for(let a=0,r=e.length;a0;e--)t[e]-=t[e-1];f.setByName(e,t)}n.topDict.privateDict=f;const p=new CFFIndex;for(h=0,u=r.length;h0&&e.toUnicode.amend(t)}class fonts_Glyph{constructor(e,t,a,r,i,n,s,o,c){this.originalCharCode=e;this.fontChar=t;this.unicode=a;this.accent=r;this.width=i;this.vmetric=n;this.operatorListId=s;this.isSpace=o;this.isInFont=c}get category(){return shadow(this,"category",function getCharUnicodeCategory(e){const t=wr.get(e);if(t)return t;const a=e.match(yr),r={isWhitespace:!!a?.[1],isZeroWidthDiacritic:!!a?.[2],isInvisibleFormatMark:!!a?.[3]};wr.set(e,r);return r}(this.unicode),!0)}}function int16(e,t){return(e<<8)+t}function writeSignedInt16(e,t,a){e[t+1]=a;e[t]=a>>>8}function signedInt16(e,t){const a=(e<<8)+t;return 32768&a?a-65536:a}function string16(e){return String.fromCharCode(e>>8&255,255&e)}function safeString16(e){e>32767?e=32767:e<-32768&&(e=-32768);return String.fromCharCode(e>>8&255,255&e)}function isTrueTypeCollectionFile(e){return"ttcf"===bytesToString(e.peekBytes(4))}function getFontFileType(e,{type:t,subtype:a,composite:r}){let i,n;if(function isTrueTypeFile(e){const t=e.peekBytes(4);return 65536===readUint32(t,0)||"true"===bytesToString(t)}(e)||isTrueTypeCollectionFile(e))i=r?"CIDFontType2":"TrueType";else if(function isOpenTypeFile(e){return"OTTO"===bytesToString(e.peekBytes(4))}(e))i=r?"CIDFontType2":"OpenType";else if(function isType1File(e){const t=e.peekBytes(2);return 37===t[0]&&33===t[1]||128===t[0]&&1===t[1]}(e))i=r?"CIDFontType0":"MMType1"===t?"MMType1":"Type1";else if(function isCFFFile(e){const t=e.peekBytes(4);return t[0]>=1&&t[3]>=1&&t[3]<=4}(e))if(r){i="CIDFontType0";n="CIDFontType0C"}else{i="MMType1"===t?"MMType1":"Type1";n="Type1C"}else{warn("getFontFileType: Unable to detect correct font file Type/Subtype.");i=t;n=a}return[i,n]}function applyStandardFontGlyphMap(e,t){for(const a in t)e[+a]=t[a]}function buildToFontChar(e,t,a){const r=[];let i;for(let a=0,n=e.length;ani[0][0]<=e&&e<=ni[0][1]||ni[1][0]<=e&&e<=ni[1][1];let u=null;for(const d in e){let f=e[d];if(!t(f))continue;if(l>h){c++;if(c>=ni.length){warn("Ran out of space in font private use area.");break}l=ni[c][0];h=ni[c][1]}const g=l++;0===f&&(f=a);let p=r.get(d);if("string"==typeof p)if(1===p.length)p=p.codePointAt(0);else{if(!u){u=new Map;for(let e=64256;e<=64335;e++){const t=String.fromCharCode(e).normalize("NFKD");t.length>1&&u.set(t,e)}}p=u.get(p)||p.codePointAt(0)}if(p&&!isInPrivateArea(p)&&!o.has(f)){n.set(p,f);o.add(f)}i[g]=f;s[d]=g}return{toFontChar:s,charCodeToGlyphId:i,toUnicodeExtraMap:n,nextAvailableFontCharCode:l}}function createCmapTable(e,t,a){const r=function getRanges(e,t,a){const r=[];for(const t in e)e[t]>=a||r.push({fontCharCode:0|t,glyphId:e[t]});if(t)for(const[e,i]of t)i>=a||r.push({fontCharCode:e,glyphId:i});0===r.length&&r.push({fontCharCode:0,glyphId:0});r.sort((e,t)=>e.fontCharCode-t.fontCharCode);const i=[],n=r.length;for(let e=0;e65535?2:1;let n,s,o,c,l="\0\0"+string16(i)+"\0\0"+string32(4+8*i);for(n=r.length-1;n>=0&&!(r[n][0]<=65535);--n);const h=n+1;r[n][0]<65535&&65535===r[n][1]&&(r[n][1]=65534);const u=r[n][1]<65535?1:0,d=h+u,f=OpenTypeFileBuilder.getSearchParams(d,2);let g,p,m,b,y="",w="",S="",x="",k="",C=0;for(n=0,s=h;n0){w+="ÿÿ";y+="ÿÿ";S+="\0";x+="\0\0"}const v="\0\0"+string16(2*d)+string16(f.range)+string16(f.entry)+string16(f.rangeShift)+w+"\0\0"+y+S+x+k;let F="",T="";if(i>1){l+="\0\0\n"+string32(4+8*i+4+v.length);F="";for(n=0,s=r.length;ne||!o)&&(o=e);c 123 are reserved for internal usage");s|=1<65535&&(c=65535)}else{o=0;c=255}const h=e.bbox||[0,0,0,0],u=a.unitsPerEm||(e.fontMatrix?1/Math.max(...e.fontMatrix.slice(0,4).map(Math.abs)):1e3),d=e.ascentScaled?1:u/si,f=a.ascent||Math.round(d*(e.ascent||h[3]));let g=a.descent||Math.round(d*(e.descent||h[1]));g>0&&e.descent>0&&h[1]<0&&(g=-g);const p=a.yMax||f,m=-a.yMin||-g;return"\0$ô\0\0\0Š»\0\0\0ŒŠ»\0\0ß\x001\0\0\0\0"+String.fromCharCode(e.fixedPitch?9:0)+"\0\0\0\0\0\0"+string32(r)+string32(i)+string32(n)+string32(s)+"*21*"+string16(e.italicAngle?1:0)+string16(o||e.firstChar)+string16(c||e.lastChar)+string16(f)+string16(g)+"\0d"+string16(p)+string16(m)+"\0\0\0\0\0\0\0\0"+string16(e.xHeight)+string16(e.capHeight)+string16(0)+string16(o||e.firstChar)+"\0"}function createPostTable(e){return"\0\0\0"+string32(Math.floor(65536*e.italicAngle))+"\0\0\0\0"+string32(e.fixedPitch?1:0)+"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"}function createPostscriptName(e){return e.replaceAll(/[^\x21-\x7E]|[[\](){}<>/%]/g,"").slice(0,63)}function createNameTable(e,t){t||(t=[[],[]]);const a=[t[0][0]||"Original licence",t[0][1]||e,t[0][2]||"Unknown",t[0][3]||"uniqueID",t[0][4]||e,t[0][5]||"Version 0.11",t[0][6]||createPostscriptName(e),t[0][7]||"Unknown",t[0][8]||"Unknown",t[0][9]||"Unknown"],r=[];let i,n,s,o,c;for(i=0,n=a.length;i0;if((s||o)&&"CIDFontType2"===a&&this.cidEncoding.startsWith("Identity-")){const a=e.cidToGidMap,r=[];applyStandardFontGlyphMap(r,Hr());/Arial-?Black/i.test(t)?applyStandardFontGlyphMap(r,Wr()):/Calibri/i.test(t)&&applyStandardFontGlyphMap(r,Gr());if(a){for(const e in r){const t=r[e];void 0!==a[t]&&(r[+e]=a[t])}a.length!==this.toUnicode.length&&e.hasIncludedToUnicodeMap&&this.toUnicode instanceof IdentityToUnicodeMap&&this.toUnicode.forEach(function(e,t){const i=r[e];void 0===a[i]&&(r[+e]=t)})}this.toUnicode instanceof IdentityToUnicodeMap||this.toUnicode.forEach(function(e,t){r[+e]=t});this.toFontChar=r;this.toUnicode=new ToUnicodeMap(r)}else if(/Symbol/i.test(r))this.toFontChar=buildToFontChar(dr,gr(),this.differences);else if(/Dingbats/i.test(r))this.toFontChar=buildToFontChar(fr,pr(),this.differences);else if(s||o){const e=buildToFontChar(this.defaultEncoding,gr(),this.differences);"CIDFontType2"!==a||this.cidEncoding.startsWith("Identity-")||this.toUnicode instanceof IdentityToUnicodeMap||this.toUnicode.forEach(function(t,a){e[+t]=a});this.toFontChar=e}else{const e=gr(),a=[];this.toUnicode.forEach((t,r)=>{if(!this.composite){const a=getUnicodeForGlyph(this.differences[t]||this.defaultEncoding[t],e);-1!==a&&(r=a)}a[+t]=r});this.composite&&this.toUnicode instanceof IdentityToUnicodeMap&&/Tahoma|Verdana/i.test(t)&&applyStandardFontGlyphMap(a,Hr());this.toFontChar=a}amendFallbackToUnicode(e);this.loadedName=r.split("-",1)[0]}checkAndRepair(e,t,a){const r=["OS/2","cmap","head","hhea","hmtx","maxp","name","post","loca","glyf","fpgm","prep","cvt ","CFF "];function readTables(e,t){const a=Object.create(null);a["OS/2"]=null;a.cmap=null;a.head=null;a.hhea=null;a.hmtx=null;a.maxp=null;a.name=null;a.post=null;for(let i=0;i>>0,r=e.getInt32()>>>0,i=e.getInt32()>>>0,n=e.pos;e.pos=e.start||0;e.skip(r);const s=e.getBytes(i);e.pos=n;if("head"===t){s[8]=s[9]=s[10]=s[11]=0;s[17]|=32}return{tag:t,checksum:a,length:i,offset:r,data:s}}function readOpenTypeHeader(e){return{version:e.getString(4),numTables:e.getUint16(),searchRange:e.getUint16(),entrySelector:e.getUint16(),rangeShift:e.getUint16()}}function sanitizeGlyph(e,t,a,r,i,n){const s={length:0,sizeOfInstructions:0};if(t<0||t>=e.length||a>e.length||a-t<=12)return s;const o=e.subarray(t,a),c=signedInt16(o[2],o[3]),l=signedInt16(o[4],o[5]),h=signedInt16(o[6],o[7]),u=signedInt16(o[8],o[9]);if(c>h){writeSignedInt16(o,2,h);writeSignedInt16(o,6,c)}if(l>u){writeSignedInt16(o,4,u);writeSignedInt16(o,8,l)}const d=signedInt16(o[0],o[1]);if(d<0){if(d<-1)return s;r.set(o,i);s.length=o.length;return s}let f,g=10,p=0;for(f=0;fo.length)return s;if(!n&&b>0){r.set(o.subarray(0,m),i);r.set([0,0],i+m);r.set(o.subarray(y,S),i+m+2);S-=b;o.length-S>3&&(S=S+3&-4);s.length=S;return s}if(o.length-S>3){S=S+3&-4;r.set(o.subarray(0,S),i);s.length=S;return s}r.set(o,i);s.length=o.length;return s}function readNameTable(e){const a=(t.start||0)+e.offset;t.pos=a;const r=[[],[]],i=[],n=e.length,s=a+n;if(0!==t.getUint16()||n<6)return[r,i];const o=t.getUint16(),c=t.getUint16();let l,h;for(l=0;ls)continue;t.pos=n;const o=e.name;if(e.encoding){let a="";for(let r=0,i=e.length;r0&&(l+=e-1)}}else{if(m||y){warn("TT: nested FDEFs not allowed");p=!0}m=!0;u=l;s=d.pop();t.functionsDefined[s]={data:c,i:l}}else if(!m&&!y){s=d.at(-1);if(isNaN(s))info("TT: CALL empty stack (or invalid entry).");else{t.functionsUsed[s]=!0;if(s in t.functionsStackDeltas){const e=d.length+t.functionsStackDeltas[s];if(e<0){warn("TT: CALL invalid functions stack delta.");t.hintsValid=!1;return}d.length=e}else if(s in t.functionsDefined&&!g.includes(s)){f.push({data:c,i:l,stackTop:d.length-1});g.push(s);o=t.functionsDefined[s];if(!o){warn("TT: CALL non-existent function");t.hintsValid=!1;return}c=o.data;l=o.i}}}if(!m&&!y){let t=0;e<=142?t=i[e]:e>=192&&e<=223?t=-1:e>=224&&(t=-2);if(e>=113&&e<=117){r=d.pop();isNaN(r)||(t=2*-r)}for(;t<0&&d.length>0;){d.pop();t++}for(;t>0;){d.push(NaN);t--}}}t.tooComplexToFollowFunctions=p;const w=[c];l>c.length&&w.push(new Uint8Array(l-c.length));if(u>h){warn("TT: complementing a missing function tail");w.push(new Uint8Array([34,45]))}!function foldTTTable(e,t){if(t.length>1){let a,r,i=0;for(a=0,r=t.length;a>>0,n=[];for(let t=0;t>>0);const s={ttcTag:t,majorVersion:a,minorVersion:r,numFonts:i,offsetTable:n};switch(a){case 1:return s;case 2:s.dsigTag=e.getInt32()>>>0;s.dsigLength=e.getInt32()>>>0;s.dsigOffset=e.getInt32()>>>0;return s}throw new FormatError(`Invalid TrueType Collection majorVersion: ${a}.`)}(e),i=t.split("+");let n;for(let s=0;s=32))throw new FormatError('"maxp" table has a wrong version number');l=65536}!function writeUint32(e,t,a){e[t+3]=255&a;e[t+2]=a>>>8;e[t+1]=a>>>16;e[t]=a>>>24}(s.maxp.data,0,l)}let u=int16(s.head.data[50],s.head.data[51]);if(s.loca){const e=u?4*(h+1):2*(h+1);if(s.loca.length!==e){warn("Incorrect 'loca' table length -- attempting to fix it.");const a=Object.values(s).filter(Boolean).sort((e,t)=>e.offset-t.offset),r=a.indexOf(s.loca),i=a[r+1]||null;if(i&&s.loca.offset+e>8&255;o[a+1]=255&r;writeSignedInt16(o,a+2,Math.round(e[t]*signedInt16(o[a+2],o[a+3])))}}let d=h+1,f=!0;if(d>65535){f=!1;d=h;warn("Not enough space in glyfs to duplicate first glyph.")}let g=0,p=0;if(l>=65536&&s.maxp.length>=32){t.pos+=8;if(t.getUint16()>2){s.maxp.data[14]=0;s.maxp.data[15]=2}t.pos+=4;g=t.getUint16();t.pos+=4;p=t.getUint16()}s.maxp.data[4]=d>>8;s.maxp.data[5]=255&d;const m=function sanitizeTTPrograms(e,t,a,r){const i={functionsDefined:[],functionsUsed:[],functionsStackDeltas:[],tooComplexToFollowFunctions:!1,hintsValid:!0};e&&sanitizeTTProgram(e,i);t&&sanitizeTTProgram(t,i);e&&function checkInvalidFunctions(e,t){if(!e.tooComplexToFollowFunctions)if(e.functionsDefined.length>t){warn("TT: more functions defined than expected");e.hintsValid=!1}else for(let a=0,r=e.functionsUsed.length;at){warn("TT: invalid function id: "+a);e.hintsValid=!1;return}if(e.functionsUsed[a]&&!e.functionsDefined[a]){warn("TT: undefined function: "+a);e.hintsValid=!1;return}}}(i,r);if(a&&1&a.length){const e=new Uint8Array(a.length+1);e.set(a.data);a.data=e}return i.hintsValid}(s.fpgm,s.prep,s["cvt "],g);if(!m){delete s.fpgm;delete s.prep;delete s["cvt "]}!function sanitizeMetrics(e,t,a,r,i,n){if(!t){a&&(a.data=null);return}e.pos=(e.start||0)+t.offset;e.pos+=4;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;const s=e.getUint16();e.pos+=8;e.pos+=2;let o=e.getUint16();if(0!==s){if(!(2&int16(r.data[44],r.data[45]))){t.data[22]=0;t.data[23]=0}}if(o>i){info(`The numOfMetrics (${o}) should not be greater than the numGlyphs (${i}).`);o=i;t.data[34]=(65280&o)>>8;t.data[35]=255&o}const c=i-o-(a.length-4*o>>1);if(c>0){const e=new Uint8Array(a.length+2*c);e.set(a.data);if(n){e[a.length]=a.data[2];e[a.length+1]=a.data[3]}a.data=e}}(t,s.hhea,s.hmtx,s.head,d,f);if(!s.head)throw new FormatError('Required "head" table is not found');!function sanitizeHead(e,t,a){const r=e.data,i=function int32(e,t,a,r){return(e<<24)+(t<<16)+(a<<8)+r}(r[0],r[1],r[2],r[3]);if(i>>16!=1){info("Attempting to fix invalid version in head table: "+i);r[0]=0;r[1]=1;r[2]=0;r[3]=0}const n=int16(r[50],r[51]);if(n<0||n>1){info("Attempting to fix invalid indexToLocFormat in head table: "+n);const e=t+1;if(a===e<<1){r[50]=0;r[51]=0}else{if(a!==e<<2)throw new FormatError("Could not fix indexToLocFormat: "+n);r[50]=0;r[51]=1}}}(s.head,h,o?s.loca.length:0);let b=Object.create(null);if(o){const e=function sanitizeGlyphLocations(e,t,a,r,i,n,s){let o,c,l;if(r){o=4;c=function fontItemDecodeLong(e,t){return e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3]};l=function fontItemEncodeLong(e,t,a){e[t]=a>>>24&255;e[t+1]=a>>16&255;e[t+2]=a>>8&255;e[t+3]=255&a}}else{o=2;c=function fontItemDecode(e,t){return e[t]<<9|e[t+1]<<1};l=function fontItemEncode(e,t,a){e[t]=a>>9&255;e[t+1]=a>>1&255}}const h=n?a+1:a,u=o*(1+h),d=new Uint8Array(u);d.set(e.data.subarray(0,u));e.data=d;const f=t.data,g=f.length,p=new Uint8Array(g);let m,b;const y=[];for(m=0,b=0;mg&&(e=g);y.push({index:m,offset:e,endOffset:0})}y.sort((e,t)=>e.offset-t.offset);for(m=0;me.index-t.index);for(m=0;ms&&(s=e.sizeOfInstructions);x+=t;l(d,b,x)}if(0===x){const e=new Uint8Array([0,1,0,0,0,0,0,0,0,0,0,0,0,0,49,0]);for(m=0,b=o;ma+x)t.data=p.subarray(0,a+x);else{t.data=new Uint8Array(a+x);t.data.set(p.subarray(0,x))}t.data.set(p.subarray(0,a),x);l(e.data,d.length-o,x+a)}else t.data=p.subarray(0,x);return{missingGlyphs:S,maxSizeOfInstructions:s}}(s.loca,s.glyf,h,u,m,f,p);b=e.missingGlyphs;if(l>=65536&&s.maxp.length>=32){s.maxp.data[26]=e.maxSizeOfInstructions>>8;s.maxp.data[27]=255&e.maxSizeOfInstructions}}if(!s.hhea)throw new FormatError('Required "hhea" table is not found');if(0===s.hhea.data[10]&&0===s.hhea.data[11]){s.hhea.data[10]=255;s.hhea.data[11]=255}const y={unitsPerEm:int16(s.head.data[18],s.head.data[19]),yMax:signedInt16(s.head.data[42],s.head.data[43]),yMin:signedInt16(s.head.data[38],s.head.data[39]),ascent:signedInt16(s.hhea.data[4],s.hhea.data[5]),descent:signedInt16(s.hhea.data[6],s.hhea.data[7]),lineGap:signedInt16(s.hhea.data[8],s.hhea.data[9])};this.ascent=y.ascent/y.unitsPerEm;this.descent=y.descent/y.unitsPerEm;this.lineGap=y.lineGap/y.unitsPerEm;if(this.cssFontInfo?.lineHeight){this.lineHeight=this.cssFontInfo.metrics.lineHeight;this.lineGap=this.cssFontInfo.metrics.lineGap}else this.lineHeight=this.ascent-this.descent+this.lineGap;s.post&&function readPostScriptTable(e,a,r){const i=(t.start||0)+e.offset;t.pos=i;const n=i+e.length,s=t.getInt32();t.skip(28);let o,c,l=!0;switch(s){case 65536:o=vr;break;case 131072:const e=t.getUint16();if(e!==r){l=!1;break}const i=[];for(c=0;c=32768){l=!1;break}i.push(e)}if(!l)break;const h=[],u=[];for(;t.pos65535)throw new FormatError("Max size of CID is 65,535");let i=-1;t?i=r:void 0!==e[r]&&(i=e[r]);i>=0&&i>>0;let h=!1;if(o?.platformId!==i||o?.encodingId!==n){if(0!==i||0!==n&&1!==n&&3!==n)if(1===i&&0===n)h=!0;else if(3!==i||1!==n||!r&&o){if(a&&3===i&&0===n){h=!0;let a=!0;if(e>3;e.push(r);a=Math.max(r,a)}const r=[];for(let e=0;e<=a;e++)r.push({firstCode:t.getUint16(),entryCount:t.getUint16(),idDelta:signedInt16(t.getByte(),t.getByte()),idRangePos:t.pos+t.getUint16()});for(let a=0;a<256;a++)if(0===e[a]){t.pos=r[0].idRangePos+2*a;f=t.getUint16();u.push({charCode:a,glyphId:f})}else{const i=r[e[a]];for(d=0;d>1;t.skip(6);const a=[];let r;for(r=0;r>1)-(e-r);i.offsetIndex=s;o=Math.max(o,s+i.end-i.start+1)}else i.offsetIndex=-1}const c=[];for(d=0;d>>0;for(d=0;d>>0,a=t.getInt32()>>>0;let r=t.getInt32()>>>0;for(let t=e;t<=a;t++)u.push({charCode:t,glyphId:r++})}}}u.sort((e,t)=>e.charCode-t.charCode);const g=[],p=new Set;for(const e of u){const{charCode:t}=e;if(!p.has(t)){p.add(t);g.push(e)}}return{platformId:o.platformId,encodingId:o.encodingId,mappings:g,hasShortCmap:h}}(s.cmap,t,this.isSymbolicFont,a.hasEncoding),r=e.platformId,i=e.encodingId,n=e.mappings;let o=[],c=!1;!a.hasEncoding||"MacRomanEncoding"!==a.baseEncodingName&&"WinAnsiEncoding"!==a.baseEncodingName||(o=getEncoding(a.baseEncodingName));if(a.hasEncoding&&!this.isSymbolicFont&&(3===r&&1===i||1===r&&0===i)){const e=gr();for(let t=0;t<256;t++){let s;s=void 0!==this.differences[t]?this.differences[t]:o.length&&""!==o[t]?o[t]:hr[t];if(!s)continue;const c=recoverGlyphName(s,e);let l;3===r&&1===i?l=e[c]:1===r&&0===i&&(l=lr.indexOf(c));if(void 0===l){if(!a.glyphNames&&a.hasIncludedToUnicodeMap&&!(this.toUnicode instanceof IdentityToUnicodeMap)){const e=this.toUnicode.get(t);e&&(l=e.codePointAt(0))}if(void 0===l)continue}for(const e of n)if(e.charCode===l){w[t]=e.glyphId;break}}}else if(0===r){for(const e of n)w[e.charCode]=e.glyphId;c=!0}else if(3===r&&0===i)for(const e of n){let t=e.charCode;t>=61440&&t<=61695&&(t&=255);w[t]=e.glyphId}else for(const e of n)w[e.charCode]=e.glyphId;if(a.glyphNames&&(o.length||this.differences.length))for(let e=0;e<256;++e){if(!c&&void 0!==w[e])continue;const t=this.differences[e]||o[e];if(!t)continue;const r=a.glyphNames.indexOf(t);r>0&&hasGlyph(r)&&(w[e]=r)}}0===w.length&&(w[0]=0);let S=d-1;f||(S=0);if(!a.cssFontInfo){const e=adjustMapping(w,hasGlyph,S,this.toUnicode);this.toFontChar=e.toFontChar;s.cmap={tag:"cmap",data:createCmapTable(e.charCodeToGlyphId,e.toUnicodeExtraMap,d)};s["OS/2"]&&function validateOS2Table(e,t){t.pos=(t.start||0)+e.offset;const a=t.getUint16();t.skip(60);const r=t.getUint16();if(a<4&&768&r)return!1;if(t.getUint16()>t.getUint16())return!1;t.skip(6);if(0===t.getUint16())return!1;e.data[8]=e.data[9]=0;return!0}(s["OS/2"],t)||(s["OS/2"]={tag:"OS/2",data:createOS2Table(a,e.charCodeToGlyphId,y)})}if(s.name){const[t,r]=readNameTable(s.name);s.name.data=createNameTable(e,t);this.psName=t[0][6]||null;a.composite||function adjustTrueTypeToUnicode(e,t,a){if(e.isInternalFont)return;if(e.hasIncludedToUnicodeMap)return;if(e.hasEncoding)return;if(e.toUnicode instanceof IdentityToUnicodeMap)return;if(!t)return;if(0===a.length)return;if(e.defaultEncoding===ur)return;for(const e of a)if(!isWinNameRecord(e))return;const r=ur,i=[],n=gr();for(const e in r){const t=r[e];if(""===t)continue;const a=n[t];void 0!==a&&(i[e]=String.fromCharCode(a))}i.length>0&&e.toUnicode.amend(i)}(a,this.isSymbolicFont,r)}else s.name={tag:"name",data:createNameTable(this.name)};const x=new OpenTypeFileBuilder(n.version);for(const e in s)x.addTable(e,s[e].data);return x.toArray()}convert(e,a,r){r.fixedPitch=!1;r.builtInEncoding&&function adjustType1ToUnicode(e,t){if(e.isInternalFont)return;if(e.hasIncludedToUnicodeMap)return;if(t===e.defaultEncoding)return;if(e.toUnicode instanceof IdentityToUnicodeMap)return;const a=[],r=gr();for(const i in t){if(e.hasEncoding&&(e.baseEncodingName||void 0!==e.differences[i]))continue;const n=getUnicodeForGlyph(t[i],r);-1!==n&&(a[i]=String.fromCharCode(n))}a.length>0&&e.toUnicode.amend(a)}(r,r.builtInEncoding);let i=1;a instanceof CFFFont&&(i=a.numGlyphs-1);const n=a.getGlyphMapping(r);let s=null,o=n,c=null;if(!r.cssFontInfo){s=adjustMapping(n,a.hasGlyphId.bind(a),i,this.toUnicode);this.toFontChar=s.toFontChar;o=s.charCodeToGlyphId;c=s.toUnicodeExtraMap}const l=a.numGlyphs;function getCharCodes(e,t){let a=null;for(const r in e)t===e[r]&&(a||=[]).push(0|r);return a}function createCharCode(e,t){for(const a in e)if(t===e[a])return 0|a;s.charCodeToGlyphId[s.nextAvailableFontCharCode]=t;return s.nextAvailableFontCharCode++}const h=a.seacs;if(s&&h?.length){const e=r.fontMatrix||t,i=a.getCharset(),o=Object.create(null);for(let t in h){t|=0;const a=h[t],r=hr[a[2]],c=hr[a[3]],l=i.indexOf(r),u=i.indexOf(c);if(l<0||u<0)continue;const d={x:a[0]*e[0]+a[1]*e[2]+e[4],y:a[0]*e[1]+a[1]*e[3]+e[5]},f=getCharCodes(n,t);if(f)for(const e of f){const t=s.charCodeToGlyphId,a=createCharCode(t,l),r=createCharCode(t,u);o[e]={baseFontCharCode:a,accentFontCharCode:r,accentOffset:d}}}r.seacMap=o}const u=r.fontMatrix?1/Math.max(...r.fontMatrix.slice(0,4).map(Math.abs)):1e3,d=new OpenTypeFileBuilder("OTTO");d.addTable("CFF ",a.data);d.addTable("OS/2",createOS2Table(r,o));d.addTable("cmap",createCmapTable(o,c,l));d.addTable("head","\0\0\0\0\0\0\0\0\0\0_<õ\0\0"+safeString16(u)+"\0\0\0\0ž\v~'\0\0\0\0ž\v~'\0\0"+safeString16(r.descent)+"ÿ"+safeString16(r.ascent)+string16(r.italicAngle?2:0)+"\0\0\0\0\0\0\0");d.addTable("hhea","\0\0\0"+safeString16(r.ascent)+safeString16(r.descent)+"\0\0ÿÿ\0\0\0\0\0\0"+safeString16(r.capHeight)+safeString16(Math.tan(r.italicAngle)*r.xHeight)+"\0\0\0\0\0\0\0\0\0\0\0\0"+string16(l));d.addTable("hmtx",function fontFieldsHmtx(){const e=a.charstrings,t=a.cff?a.cff.widths:null;let r="\0\0\0\0";for(let a=1,i=l;a=65520&&e<=65535?0:e>=62976&&e<=63743?mr()[e]||e:173===e?45:e}(a)}this.isType3Font&&(i=a);let h=null;if(this.seacMap?.[e]){l=!0;const t=this.seacMap[e];a=t.baseFontCharCode;h={fontChar:String.fromCodePoint(t.accentFontCharCode),offset:t.accentOffset}}let u="";"number"==typeof a&&(a<=1114111?u=String.fromCodePoint(a):warn(`charToGlyph - invalid fontCharCode: ${a}`));if(this.missingFile&&this.vertical&&1===u.length){const e=Fr()[u.charCodeAt(0)];e&&(u=c=String.fromCharCode(e))}n=new fonts_Glyph(e,u,c,h,r,o,i,t,l);return this._glyphCache[e]=n}charsToGlyphs(e){let t=this._charsCache[e];if(t)return t;t=[];if(this.cMap){const a=Object.create(null),r=e.length;let i=0;for(;it.length%2==1,r=this.toUnicode instanceof IdentityToUnicodeMap?e=>this.toUnicode.charCodeOf(e):e=>this.toUnicode.charCodeOf(String.fromCodePoint(e));for(let i=0,n=e.length;i55295&&(n<57344||n>65533)&&i++;if(this.toUnicode){const e=r(n);if(-1!==e){if(hasCurrentBufErrors()){t.push(a.join(""));a.length=0}for(let t=(this.cMap?this.cMap.getCharCodeLength(e):1)-1;t>=0;t--)a.push(String.fromCharCode(e>>8*t&255));continue}}if(!hasCurrentBufErrors()){t.push(a.join(""));a.length=0}a.push(String.fromCodePoint(n))}t.push(a.join(""));return t}}class ErrorFont{constructor(e){this.error=e;this.loadedName="g_font_error";this.missingFile=!0}charsToGlyphs(){return[]}encodeString(e){return[e]}exportData(){return{error:this.error}}}class CssFontInfo{#R;#W;#G;static strings=["fontFamily","fontWeight","italicAngle"];static write(e){const t=new TextEncoder,a={};let r=0;for(const i of CssFontInfo.strings){const n=t.encode(e[i]);a[i]=n;r+=4+n.length}const i=new ArrayBuffer(r),n=new Uint8Array(i),s=new DataView(i);let o=0;for(const e of CssFontInfo.strings){const t=a[e],r=t.length;s.setUint32(o,r);n.set(t,o+4);o+=4+r}assert(o===i.byteLength,"CssFontInfo.write: Buffer overflow");return i}constructor(e){this.#R=e;this.#W=new DataView(this.#R);this.#G=new TextDecoder}#$(e){assert(e>a&3;return 0===r?void 0:2===r}get black(){return this.#Z(0)}get bold(){return this.#Z(1)}get disableFontFace(){return this.#Z(2)}get fontExtraProperties(){return this.#Z(3)}get isInvalidPDFjsFont(){return this.#Z(4)}get isType3Font(){return this.#Z(5)}get italic(){return this.#Z(6)}get missingFile(){return this.#Z(7)}get remeasure(){return this.#Z(8)}get vertical(){return this.#Z(9)}#Q(e){assert(e0){let e=l[0],a=l[0],r=l[1],i=l[1];for(let t=0;tn?n:e;r=r>s?s:r;a=a"boolean"==typeof e)})(f,2)&&([u,d]=f);if(!(this.shadingType!==hi||u&&d)){const[e,t,a,r,i,n]=this.coordsArr,s=Math.hypot(e-r,t-i);a<=n+s&&n<=a+s&&warn("Unsupported radial gradient.")}this.extendStart=u;this.extendEnd=d;const g=e.getRaw("Function"),p=r.create(g,!0),m=(l-c)/840,b=this.colorStops=[];if(c>=l||m<=0){info("Bad shading domain.");return}const y=new Float32Array(o.numComps),w=new Float32Array(1);let S=0;w[0]=c;p(w,0,y,0);const x=new Uint8ClampedArray(3);o.getRgb(y,0,x);let[k,C,v]=x;b.push([0,Util.makeHexColor(k,C,v)]);let F=1;w[0]=c+m;p(w,0,y,0);o.getRgb(y,0,x);let[T,O,D]=x,M=T-k+1,R=O-C+1,N=D-v+1,E=T-k-1,L=O-C-1,_=D-v-1;for(let e=2;e<840;e++){w[0]=c+e*m;p(w,0,y,0);o.getRgb(y,0,x);const[t,a,r]=x,i=e-S;M=Math.min(M,(t-k+1)/i);R=Math.min(R,(a-C+1)/i);N=Math.min(N,(r-v+1)/i);E=Math.max(E,(t-k-1)/i);L=Math.max(L,(a-C-1)/i);_=Math.max(_,(r-v-1)/i);if(!(E<=M&&L<=R&&_<=N)){const e=Util.makeHexColor(T,O,D);b.push([F/840,e]);M=t-T+1;R=a-O+1;N=r-D+1;E=t-T-1;L=a-O-1;_=r-D-1;S=F;k=T;C=O;v=D}F=e;T=t;O=a;D=r}b.push([1,Util.makeHexColor(T,O,D)]);let U="transparent";e.has("Background")&&(U=o.getRgbHex(e.get("Background"),0));if(!u){b.unshift([0,U]);b[1][0]+=BaseShading.SMALL_NUMBER}if(!d){b.at(-1)[0]-=BaseShading.SMALL_NUMBER;b.push([1,U])}this.colorStops=b}getIR(){const{coordsArr:e,shadingType:t}=this;let a,r,i,n,s;if(t===li){r=[e[0],e[1]];i=[e[2],e[3]];n=null;s=null;a="axial"}else if(t===hi){r=[e[0],e[1]];i=[e[3],e[4]];n=e[2];s=e[5];a="radial"}else unreachable(`getPattern type unknown: ${t}`);return["RadialAxial",a,this.bbox,this.colorStops,r,i,n,s]}}class MeshStreamReader{constructor(e,t){this.stream=e;this.context=t;this.buffer=0;this.bufferLength=0;const a=t.numComps;this.tmpCompsBuf=new Float32Array(a);const r=t.colorSpace.numComps;this.tmpCsCompsBuf=t.colorFn?new Float32Array(r):this.tmpCompsBuf}get hasData(){if(this.stream.end)return this.stream.pos0)return!0;const e=this.stream.getByte();if(e<0)return!1;this.buffer=e;this.bufferLength=8;return!0}readBits(e){const{stream:t}=this;let{buffer:a,bufferLength:r}=this;if(32===e){if(0===r)return t.getInt32()>>>0;a=a<<24|t.getByte()<<16|t.getByte()<<8|t.getByte();const e=t.getByte();this.buffer=e&(1<>r)>>>0}if(8===e&&0===r)return t.getByte();for(;r>r}align(){this.buffer=0;this.bufferLength=0}readFlag(){return this.readBits(this.context.bitsPerFlag)}readCoordinate(){const{bitsPerCoordinate:e,decode:t}=this.context,a=this.readBits(e),r=this.readBits(e),i=e<32?1/((1<n?n:e;t=t>s?s:t;a=ae*i[t]):a;let s,o=-2;const c=[];for(const[e,t]of r.map((e,t)=>[e,t]).sort(([e],[t])=>e-t))if(-1!==e)if(e===o+1){s.push(n[t]);o+=1}else{o=e;s=[n[t]];c.push(e,s)}return c}(e),a=new Dict(null);a.set("BaseFont",Name.get(e));a.set("Type",Name.get("Font"));a.set("Subtype",Name.get("CIDFontType2"));a.set("Encoding",Name.get("Identity-H"));a.set("CIDToGIDMap",Name.get("Identity"));a.set("W",t);a.set("FirstChar",t[0]);a.set("LastChar",t.at(-2)+t.at(-1).length-1);const r=new Dict(null);a.set("FontDescriptor",r);const i=new Dict(null);i.set("Ordering","Identity");i.set("Registry","Adobe");i.set("Supplement",0);a.set("CIDSystemInfo",i);return a}class PostScriptParser{constructor(e){this.lexer=e;this.operators=[];this.token=null;this.prev=null}nextToken(){this.prev=this.token;this.token=this.lexer.getToken()}accept(e){if(this.token.type===e){this.nextToken();return!0}return!1}expect(e){if(this.accept(e))return!0;throw new FormatError(`Unexpected symbol: found ${this.token.type} expected ${e}.`)}parse(){this.nextToken();this.expect(sn.LBRACE);this.parseBlock();this.expect(sn.RBRACE);return this.operators}parseBlock(){for(;;)if(this.accept(sn.NUMBER))this.operators.push(this.prev.value);else if(this.accept(sn.OPERATOR))this.operators.push(this.prev.value);else{if(!this.accept(sn.LBRACE))return;this.parseCondition()}}parseCondition(){const e=this.operators.length;this.operators.push(null,null);this.parseBlock();this.expect(sn.RBRACE);if(this.accept(sn.IF)){this.operators[e]=this.operators.length;this.operators[e+1]="jz"}else{if(!this.accept(sn.LBRACE))throw new FormatError("PS Function: error parsing conditional.");{const t=this.operators.length;this.operators.push(null,null);const a=this.operators.length;this.parseBlock();this.expect(sn.RBRACE);this.expect(sn.IFELSE);this.operators[t]=this.operators.length;this.operators[t+1]="j";this.operators[e]=a;this.operators[e+1]="jz"}}}}const sn={LBRACE:0,RBRACE:1,NUMBER:2,OPERATOR:3,IF:4,IFELSE:5};class PostScriptToken{static get opCache(){return shadow(this,"opCache",Object.create(null))}constructor(e,t){this.type=e;this.value=t}static getOperator(e){return PostScriptToken.opCache[e]||=new PostScriptToken(sn.OPERATOR,e)}static get LBRACE(){return shadow(this,"LBRACE",new PostScriptToken(sn.LBRACE,"{"))}static get RBRACE(){return shadow(this,"RBRACE",new PostScriptToken(sn.RBRACE,"}"))}static get IF(){return shadow(this,"IF",new PostScriptToken(sn.IF,"IF"))}static get IFELSE(){return shadow(this,"IFELSE",new PostScriptToken(sn.IFELSE,"IFELSE"))}}class PostScriptLexer{constructor(e){this.stream=e;this.nextChar();this.strBuf=[]}nextChar(){return this.currentChar=this.stream.getByte()}getToken(){let e=!1,t=this.currentChar;for(;;){if(t<0)return sa;if(e)10!==t&&13!==t||(e=!1);else if(37===t)e=!0;else if(!isWhiteSpace(t))break;t=this.nextChar()}switch(0|t){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 43:case 45:case 46:return new PostScriptToken(sn.NUMBER,this.getNumber());case 123:this.nextChar();return PostScriptToken.LBRACE;case 125:this.nextChar();return PostScriptToken.RBRACE}const a=this.strBuf;a.length=0;a[0]=String.fromCharCode(t);for(;(t=this.nextChar())>=0&&(t>=65&&t<=90||t>=97&&t<=122);)a.push(String.fromCharCode(t));const r=a.join("");switch(r.toLowerCase()){case"if":return PostScriptToken.IF;case"ifelse":return PostScriptToken.IFELSE;default:return PostScriptToken.getOperator(r)}}getNumber(){let e=this.currentChar;const t=this.strBuf;t.length=0;t[0]=String.fromCharCode(e);for(;(e=this.nextChar())>=0&&(e>=48&&e<=57||45===e||46===e);)t.push(String.fromCharCode(e));const a=parseFloat(t.join(""));if(isNaN(a))throw new FormatError(`Invalid floating point number: ${a}`);return a}}class BaseLocalCache{constructor(e){this._onlyRefs=!0===e?.onlyRefs;if(!this._onlyRefs){this._nameRefMap=new Map;this._imageMap=new Map}this._imageCache=new RefSetCache}getByName(e){this._onlyRefs&&unreachable("Should not call `getByName` method.");const t=this._nameRefMap.get(e);return t?this.getByRef(t):this._imageMap.get(e)||null}getByRef(e){return this._imageCache.get(e)||null}set(e,t,a){unreachable("Abstract method `set` called.")}}class LocalImageCache extends BaseLocalCache{set(e,t=null,a){if("string"!=typeof e)throw new Error('LocalImageCache.set - expected "name" argument.');if(t){if(this._imageCache.has(t))return;this._nameRefMap.set(e,t);this._imageCache.put(t,a)}else this._imageMap.has(e)||this._imageMap.set(e,a)}}class LocalColorSpaceCache extends BaseLocalCache{set(e=null,t=null,a){if("string"!=typeof e&&!t)throw new Error('LocalColorSpaceCache.set - expected "name" and/or "ref" argument.');if(t){if(this._imageCache.has(t))return;null!==e&&this._nameRefMap.set(e,t);this._imageCache.put(t,a)}else this._imageMap.has(e)||this._imageMap.set(e,a)}}class LocalFunctionCache extends BaseLocalCache{constructor(e){super({onlyRefs:!0})}set(e=null,t,a){if(!t)throw new Error('LocalFunctionCache.set - expected "ref" argument.');this._imageCache.has(t)||this._imageCache.put(t,a)}}class LocalGStateCache extends BaseLocalCache{set(e,t=null,a){if("string"!=typeof e)throw new Error('LocalGStateCache.set - expected "name" argument.');if(t){if(this._imageCache.has(t))return;this._nameRefMap.set(e,t);this._imageCache.put(t,a)}else this._imageMap.has(e)||this._imageMap.set(e,a)}}class LocalTilingPatternCache extends BaseLocalCache{constructor(e){super({onlyRefs:!0})}set(e=null,t,a){if(!t)throw new Error('LocalTilingPatternCache.set - expected "ref" argument.');this._imageCache.has(t)||this._imageCache.put(t,a)}}class RegionalImageCache extends BaseLocalCache{constructor(e){super({onlyRefs:!0})}set(e=null,t,a){if(!t)throw new Error('RegionalImageCache.set - expected "ref" argument.');this._imageCache.has(t)||this._imageCache.put(t,a)}}class GlobalColorSpaceCache extends BaseLocalCache{constructor(e){super({onlyRefs:!0})}set(e=null,t,a){if(!t)throw new Error('GlobalColorSpaceCache.set - expected "ref" argument.');this._imageCache.has(t)||this._imageCache.put(t,a)}clear(){this._imageCache.clear()}}class GlobalImageCache{static NUM_PAGES_THRESHOLD=2;static MIN_IMAGES_TO_CACHE=10;static MAX_BYTE_SIZE=5e7;#ce=new RefSet;constructor(){this._refCache=new RefSetCache;this._imageCache=new RefSetCache}get#le(){let e=0;for(const t of this._imageCache)e+=t.byteSize;return e}get#he(){return!(this._imageCache.size+e):null}class PDFFunction{static getSampleArray(e,t,a,r){let i,n,s=1;for(i=0,n=e.length;i>c)*h;l&=(1<0&&(d=n[u-1]);let f=a[1];u>1,c=r.length>>1,l=new PostScriptEvaluator(s),h=Object.create(null);let u=8192;const d=new Float32Array(c);return function constructPostScriptFn(e,t,a,r){let n,s,f="";const g=d;for(n=0;ne&&(s=e)}m[n]=s}if(u>0){u--;h[f]=m}a.set(m,r)}}}function isPDFFunction(e){let t;if(e instanceof Dict)t=e;else{if(!(e instanceof BaseStream))return!1;t=e.dict}return t.has("FunctionType")}class PostScriptStack{static MAX_STACK_SIZE=100;constructor(e){this.stack=e?Array.from(e):[]}push(e){if(this.stack.length>=PostScriptStack.MAX_STACK_SIZE)throw new Error("PostScript function stack overflow.");this.stack.push(e)}pop(){if(this.stack.length<=0)throw new Error("PostScript function stack underflow.");return this.stack.pop()}copy(e){if(this.stack.length+e>=PostScriptStack.MAX_STACK_SIZE)throw new Error("PostScript function stack overflow.");const t=this.stack;for(let a=t.length-e,r=e-1;r>=0;r--,a++)t.push(t[a])}index(e){this.push(this.stack[this.stack.length-e-1])}roll(e,t){const a=this.stack,r=a.length-e,i=a.length-1,n=r+(t-Math.floor(t/e)*e);for(let e=r,t=i;e0?t.push(s<>o);break;case"ceiling":s=t.pop();t.push(Math.ceil(s));break;case"copy":s=t.pop();t.copy(s);break;case"cos":s=t.pop();t.push(Math.cos(s%360/180*Math.PI));break;case"cvi":s=0|t.pop();t.push(s);break;case"cvr":break;case"div":o=t.pop();s=t.pop();t.push(s/o);break;case"dup":t.copy(1);break;case"eq":o=t.pop();s=t.pop();t.push(s===o);break;case"exch":t.roll(2,1);break;case"exp":o=t.pop();s=t.pop();t.push(s**o);break;case"false":t.push(!1);break;case"floor":s=t.pop();t.push(Math.floor(s));break;case"ge":o=t.pop();s=t.pop();t.push(s>=o);break;case"gt":o=t.pop();s=t.pop();t.push(s>o);break;case"idiv":o=t.pop();s=t.pop();t.push(s/o|0);break;case"index":s=t.pop();t.index(s);break;case"le":o=t.pop();s=t.pop();t.push(s<=o);break;case"ln":s=t.pop();t.push(Math.log(s));break;case"log":s=t.pop();t.push(Math.log10(s));break;case"lt":o=t.pop();s=t.pop();t.push(s=t?new AstLiteral(t):e.max<=t?e:new AstMin(e,t)}class PostScriptCompiler{compile(e,t,a){const r=[],i=[],n=t.length>>1,s=a.length>>1;let o,c,l,h,u,d,f,g,p=0;for(let e=0;et.min){o.unshift("Math.max(",n,", ");o.push(")")}if(s4){r=!0;t=0}else{r=!1;t=1}const c=[];for(n=0;n=0&&"ET"===hn[e];--e)hn[e]="EN";for(let e=n+1;e0&&(t=hn[n-1]);let a=u;e+1g&&isOdd(g)&&(m=g)}for(g=p;g>=m;--g){let e=-1;for(n=0,s=c.length;n=0){reverseValues(ln,e,n);e=-1}}else e<0&&(e=n);e>=0&&reverseValues(ln,e,c.length)}for(n=0,s=ln.length;n"!==e||(ln[n]="")}return createBidiText(ln.join(""),r)}const un={style:"normal",weight:"normal"},dn={style:"normal",weight:"bold"},fn={style:"italic",weight:"normal"},gn={style:"italic",weight:"bold"},pn=new Map([["Times-Roman",{local:["Times New Roman","Times-Roman","Times","Liberation Serif","Nimbus Roman","Nimbus Roman L","Tinos","Thorndale","TeX Gyre Termes","FreeSerif","Linux Libertine O","Libertinus Serif","PT Astra Serif","DejaVu Serif","Bitstream Vera Serif","Ubuntu"],style:un,ultimate:"serif"}],["Times-Bold",{alias:"Times-Roman",style:dn,ultimate:"serif"}],["Times-Italic",{alias:"Times-Roman",style:fn,ultimate:"serif"}],["Times-BoldItalic",{alias:"Times-Roman",style:gn,ultimate:"serif"}],["Helvetica",{local:["Helvetica","Helvetica Neue","Arial","Arial Nova","Liberation Sans","Arimo","Nimbus Sans","Nimbus Sans L","A030","TeX Gyre Heros","FreeSans","DejaVu Sans","Albany","Bitstream Vera Sans","Arial Unicode MS","Microsoft Sans Serif","Apple Symbols","Cantarell"],path:"LiberationSans-Regular.ttf",style:un,ultimate:"sans-serif"}],["Helvetica-Bold",{alias:"Helvetica",path:"LiberationSans-Bold.ttf",style:dn,ultimate:"sans-serif"}],["Helvetica-Oblique",{alias:"Helvetica",path:"LiberationSans-Italic.ttf",style:fn,ultimate:"sans-serif"}],["Helvetica-BoldOblique",{alias:"Helvetica",path:"LiberationSans-BoldItalic.ttf",style:gn,ultimate:"sans-serif"}],["Courier",{local:["Courier","Courier New","Liberation Mono","Nimbus Mono","Nimbus Mono L","Cousine","Cumberland","TeX Gyre Cursor","FreeMono","Linux Libertine Mono O","Libertinus Mono"],style:un,ultimate:"monospace"}],["Courier-Bold",{alias:"Courier",style:dn,ultimate:"monospace"}],["Courier-Oblique",{alias:"Courier",style:fn,ultimate:"monospace"}],["Courier-BoldOblique",{alias:"Courier",style:gn,ultimate:"monospace"}],["ArialBlack",{local:["Arial Black"],style:{style:"normal",weight:"900"},fallback:"Helvetica-Bold"}],["ArialBlack-Bold",{alias:"ArialBlack"}],["ArialBlack-Italic",{alias:"ArialBlack",style:{style:"italic",weight:"900"},fallback:"Helvetica-BoldOblique"}],["ArialBlack-BoldItalic",{alias:"ArialBlack-Italic"}],["ArialNarrow",{local:["Arial Narrow","Liberation Sans Narrow","Helvetica Condensed","Nimbus Sans Narrow","TeX Gyre Heros Cn"],style:un,fallback:"Helvetica"}],["ArialNarrow-Bold",{alias:"ArialNarrow",style:dn,fallback:"Helvetica-Bold"}],["ArialNarrow-Italic",{alias:"ArialNarrow",style:fn,fallback:"Helvetica-Oblique"}],["ArialNarrow-BoldItalic",{alias:"ArialNarrow",style:gn,fallback:"Helvetica-BoldOblique"}],["Calibri",{local:["Calibri","Carlito"],style:un,fallback:"Helvetica"}],["Calibri-Bold",{alias:"Calibri",style:dn,fallback:"Helvetica-Bold"}],["Calibri-Italic",{alias:"Calibri",style:fn,fallback:"Helvetica-Oblique"}],["Calibri-BoldItalic",{alias:"Calibri",style:gn,fallback:"Helvetica-BoldOblique"}],["Wingdings",{local:["Wingdings","URW Dingbats"],style:un}],["Wingdings-Regular",{alias:"Wingdings"}],["Wingdings-Bold",{alias:"Wingdings"}],["ËÎÌå",{local:["SimSun","SimSun Regular","NSimSun"],style:un,ultimate:"serif"}],["ºÚÌå",{local:["SimHei","SimHei Regular"],style:un,ultimate:"sans-serif"}],["¿¬Ìå",{local:["KaiTi","SimKai","SimKai Regular"],style:un,ultimate:"sans-serif"}],["·ÂËÎ",{local:["FangSong","SimFang","SimFang Regular"],style:un,ultimate:"serif"}],["¿¬Ìå_GB2312",{alias:"¿¬Ìå"}],["·ÂËÎ_GB2312",{alias:"·ÂËÎ"}],["Á¥Êé",{local:["SimLi","SimLi Regular"],style:un,ultimate:"serif"}],["ÐÂËÎ",{alias:"ËÎÌå"}]]),mn=new Map([["Arial-Black","ArialBlack"]]);function getFamilyName(e){const t=new Set(["thin","extralight","ultralight","demilight","semilight","light","book","regular","normal","medium","demibold","semibold","bold","extrabold","ultrabold","black","heavy","extrablack","ultrablack","roman","italic","oblique","ultracondensed","extracondensed","condensed","semicondensed","normal","semiexpanded","expanded","extraexpanded","ultraexpanded","bolditalic"]);return e.split(/[- ,+]+/g).filter(e=>!t.has(e.toLowerCase())).join(" ")}function generateFont({alias:e,local:t,path:a,fallback:r,style:i,ultimate:n},s,o,c=!0,l=!0,h=""){const u={style:null,ultimate:null};if(t){const e=h?` ${h}`:"";for(const a of t)s.push(`local(${a}${e})`)}if(e){const t=pn.get(e),n=h||function getStyleToAppend(e){switch(e){case dn:return"Bold";case fn:return"Italic";case gn:return"Bold Italic";default:if("bold"===e?.weight)return"Bold";if("italic"===e?.style)return"Italic"}return""}(i);Object.assign(u,generateFont(t,s,o,c&&!r,l&&!a,n))}i&&(u.style=i);n&&(u.ultimate=n);if(c&&r){const e=pn.get(r),{ultimate:t}=generateFont(e,s,o,c,l&&!a,h);u.ultimate||=t}l&&a&&o&&s.push(`url(${o}${a})`);return u}function getFontSubstitution(e,t,a,r,i,n){if(r.startsWith("InvalidPDFjsFont_"))return null;"TrueType"!==n&&"Type1"!==n||!/^[A-Z]{6}\+/.test(r)||(r=r.slice(7));const s=r=normalizeFontName(r);let o=e.get(s);if(o)return o;let c=pn.get(r);if(!c)for(const[e,t]of mn)if(r.startsWith(e)){r=`${t}${r.substring(e.length)}`;c=pn.get(r);break}let l=!1;if(!c){c=pn.get(i);l=!0}const h=`${t.getDocId()}_s${t.createFontId()}`;if(!c){if(!validateFontName(r)){warn(`Cannot substitute the font because of its name: ${r}`);e.set(s,null);return null}const t=/bold/gi.test(r),a=/oblique|italic/gi.test(r),i=t&&a&&gn||t&&dn||a&&fn||un;o={css:`"${getFamilyName(r)}",${h}`,guessFallback:!0,loadedName:h,baseFontName:r,src:`local(${r})`,style:i};e.set(s,o);return o}const u=[];l&&validateFontName(r)&&u.push(`local(${r})`);const{style:d,ultimate:f}=generateFont(c,u,a),g=null===f,p=g?"":`,${f}`;o={css:`"${getFamilyName(r)}",${h}${p}`,guessFallback:g,loadedName:h,baseFontName:r,src:u.join(","),style:d};e.set(s,o);return o}const bn=3285377520,yn=4294901760,wn=65535;class MurmurHash3_64{constructor(e){this.h1=e?4294967295&e:bn;this.h2=e?4294967295&e:bn}update(e){let t,a;if("string"==typeof e){t=new Uint8Array(2*e.length);a=0;for(let r=0,i=e.length;r>>8;t[a++]=255&i}}}else{if(!ArrayBuffer.isView(e))throw new Error("Invalid data format, must be a string or TypedArray.");t=e.slice();a=t.byteLength}const r=a>>2,i=a-4*r,n=new Uint32Array(t.buffer,0,r);let s=0,o=0,c=this.h1,l=this.h2;const h=3432918353,u=461845907,d=11601,f=13715;for(let e=0;e>>17;s=s*u&yn|s*f&wn;c^=s;c=c<<13|c>>>19;c=5*c+3864292196}else{o=n[e];o=o*h&yn|o*d&wn;o=o<<15|o>>>17;o=o*u&yn|o*f&wn;l^=o;l=l<<13|l>>>19;l=5*l+3864292196}s=0;switch(i){case 3:s^=t[4*r+2]<<16;case 2:s^=t[4*r+1]<<8;case 1:s^=t[4*r];s=s*h&yn|s*d&wn;s=s<<15|s>>>17;s=s*u&yn|s*f&wn;1&r?c^=s:l^=s}this.h1=c;this.h2=l}hexdigest(){let e=this.h1,t=this.h2;e^=t>>>1;e=3981806797*e&yn|36045*e&wn;t=4283543511*t&yn|(2950163797*(t<<16|e>>>16)&yn)>>>16;e^=t>>>1;e=444984403*e&yn|60499*e&wn;t=3301882366*t&yn|(3120437893*(t<<16|e>>>16)&yn)>>>16;e^=t>>>1;return(e>>>0).toString(16).padStart(8,"0")+(t>>>0).toString(16).padStart(8,"0")}}function resizeImageMask(e,t,a,r,i,n){const s=i*n;let o;o=t<=8?new Uint8Array(s):t<=16?new Uint16Array(s):new Uint32Array(s);const c=a/i,l=r/n;let h,u,d,f,g=0;const p=new Uint16Array(i),m=a;for(h=0;h0&&Number.isInteger(a.height)&&a.height>0&&(a.width!==f||a.height!==g)){warn("PDFImage - using the Width/Height of the image data, rather than the image dictionary.");f=a.width;g=a.height}else{const e="number"==typeof f&&f>0,t="number"==typeof g&&g>0;if(!e||!t){if(!a.fallbackDims)throw new FormatError(`Invalid image width: ${f} or height: ${g}`);warn("PDFImage - using the Width/Height of the parent image, for SMask/Mask data.");e||(f=a.fallbackDims.width);t||(g=a.fallbackDims.height)}}this.width=f;this.height=g;this.interpolate=h.get("I","Interpolate");this.imageMask=h.get("IM","ImageMask")||!1;this.matte=h.get("Matte")||!1;let p=a.bitsPerComponent;if(!p){p=h.get("BPC","BitsPerComponent");if(!p){if(!this.imageMask)throw new FormatError(`Bits per component missing in image: ${this.imageMask}`);p=1}}this.bpc=p;if(!this.imageMask){let i=h.getRaw("CS")||h.getRaw("ColorSpace");const n=!!i;if(n)this.jpxDecoderOptions?.smaskInData&&(i=Name.get("DeviceRGBA"));else if(this.jpxDecoderOptions)i=Name.get("DeviceRGBA");else switch(a.numComps){case 1:i=Name.get("DeviceGray");break;case 3:i=Name.get("DeviceRGB");break;case 4:i=Name.get("DeviceCMYK");break;default:throw new Error(`Images with ${a.numComps} color components not supported.`)}this.colorSpace=ColorSpaceUtils.parse({cs:i,xref:e,resources:r?t:null,pdfFunctionFactory:o,globalColorSpaceCache:c,localColorSpaceCache:l});this.numComps=this.colorSpace.numComps;if(this.jpxDecoderOptions){this.jpxDecoderOptions.numComponents=n?this.numComps:0;this.jpxDecoderOptions.isIndexedColormap="Indexed"===this.colorSpace.name}}this.decode=h.getArray("D","Decode");this.needsDecode=!1;if(this.decode&&(this.colorSpace&&!this.colorSpace.isDefaultDecode(this.decode,p)||s&&!ColorSpace.isDefaultDecode(this.decode,1))){this.needsDecode=!0;const e=(1<0,c=(r+7>>3)*i,l=await e.getImageData(c),h=1===r&&1===i&&o===(0===l.length||!!(128&l[0]));if(h)return{isSingleOpaquePixel:h};if(t){if(ImageResizer.needsToBeResized(r,i)){const e=new Uint8ClampedArray(r*i*4);convertBlackAndWhiteToRGBA({src:l,dest:e,width:r,height:i,nonBlackColor:0,inverseDecode:o});return ImageResizer.createImage({kind:O,data:e,width:r,height:i,interpolate:n})}const e=new OffscreenCanvas(r,i),t=e.getContext("2d"),a=t.createImageData(r,i);convertBlackAndWhiteToRGBA({src:l,dest:a.data,width:r,height:i,nonBlackColor:0,inverseDecode:o});t.putImageData(a,0,0);return{data:null,width:r,height:i,interpolate:n,bitmap:e.transferToImageBitmap()}}const u=l.byteLength;let d;if(e instanceof DecodeStream&&(!o||c===u))d=l;else if(o){d=new Uint8Array(c);d.set(l);d.fill(255,u)}else d=new Uint8Array(l);if(o)for(let e=0;e>7&1;s[d+1]=u>>6&1;s[d+2]=u>>5&1;s[d+3]=u>>4&1;s[d+4]=u>>3&1;s[d+5]=u>>2&1;s[d+6]=u>>1&1;s[d+7]=1&u;d+=8}if(d>=1}}}}else{let a=0;u=0;for(d=0,h=n;d>r;i<0?i=0:i>l&&(i=l);s[d]=i;u&=(1<s[r+1]){t=255;break}}o[h]=t}}}if(o)for(h=0,d=3,u=t*r;h>3,h=t&&ImageResizer.needsToBeResized(a,r);if(!this.smask&&!this.mask&&"DeviceRGBA"===this.colorSpace.name){i.kind=O;const e=i.data=await this.getImageBytes(o*s*4,{});return t?h?ImageResizer.createImage(i,!1):this.createBitmap(O,a,r,e):i}if(!e){let e;"DeviceGray"===this.colorSpace.name&&1===c?e=F:"DeviceRGB"!==this.colorSpace.name||8!==c||this.needsDecode||(e=T);if(e&&!this.smask&&!this.mask&&a===s&&r===o){const n=await this.#ue(s,o);if(n)return n;const c=await this.getImageBytes(o*l,{});if(t)return h?ImageResizer.createImage({data:c,kind:e,width:a,height:r,interpolate:this.interpolate},this.needsDecode):this.createBitmap(e,s,o,c);i.kind=e;i.data=c;if(this.needsDecode){assert(e===F,"PDFImage.createImageData: The image must be grayscale.");const t=i.data;for(let e=0,a=t.length;e>3,s=await this.getImageBytes(r*n,{internal:!0}),o=this.getComponents(s);let c,l;if(1===i){l=a*r;if(this.needsDecode)for(c=0;c0&&r[0].count++}class TimeSlotManager{static TIME_SLOT_DURATION_MS=20;static CHECK_TIME_EVERY=100;constructor(){this.reset()}check(){if(++this.checkedo){const e="Image exceeded maximum allowed size and was removed.";if(!c)throw new Error(e);warn(e);return}let g;h.has("OC")&&(g=await this.parseMarkedContentProps(h.get("OC"),e));let p,m,b;if(h.get("IM","ImageMask")||!1){p=await PDFImage.createMask({image:t,isOffscreenCanvasSupported:l&&!this.parsingType3Font});if(p.isSingleOpaquePixel){m=Xt;b=[];r.addImageOps(m,b,g);if(i){const e={fn:m,args:b,optionalContent:g};n.set(i,u,e);u&&this._regionalImageCache.set(null,u,e)}return}if(this.parsingType3Font){b=function compileType3Glyph({data:e,width:t,height:a}){if(t>1e3||a>1e3)return null;const r=new Uint8Array([0,2,4,0,1,0,5,4,8,10,0,8,0,2,1,0]),i=t+1,n=new Uint8Array(i*(a+1));let s,o,c;const l=t+7&-8,h=new Uint8Array(l*a);let u=0;for(const t of e){let e=128;for(;e>0;){h[u++]=t&e?0:255;e>>=1}}let d=0;u=0;if(0!==h[u]){n[0]=1;++d}for(o=1;o>2)+(h[u+1]?4:0)+(h[u-l+1]?8:0);if(r[e]){n[c+o]=r[e];++d}u++}if(h[u-l]!==h[u]){n[c+o]=h[u]?2:4;++d}if(d>1e3)return null}u=l*(a-1);c=s*i;if(0!==h[u]){n[c]=8;++d}for(o=1;o1e3)return null;const f=new Int32Array([0,i,-1,0,-i,0,0,0,1]),g=[],{a:p,b:m,c:b,d:y,e:w,f:S}=(new DOMMatrix).scaleSelf(1/t,-1/a).translateSelf(0,-a);for(s=0;d&&s<=a;s++){let e=s*i;const a=e+t;for(;e>4;n[e]&=l>>2|l<<2}r=e%i;o=e/i|0;g.push(zt,p*r+b*o+w,m*r+y*o+S);n[e]||--d}while(c!==e);--s}return[Gt,[new Float32Array(g)],new Float32Array([0,0,t,a])]}(p);if(b){r.addImageOps(qt,b,g);return}warn("Cannot compile Type3 glyph.");r.addImageOps(Nt,[p],g);return}const e=`mask_${this.idFactory.createObjId()}`;r.addDependency(e);p.dataLen=p.bitmap?p.width*p.height*4:p.data.length;this._sendImgData(e,p);m=Nt;b=[{data:e,width:p.width,height:p.height,interpolate:p.interpolate,count:1}];r.addImageOps(m,b,g);if(i){const t={objId:e,fn:m,args:b,optionalContent:g};n.set(i,u,t);u&&this._regionalImageCache.set(null,u,t)}return}const y=h.has("SMask")||h.has("Mask");if(a&&d+f<200&&!y){try{const i=new PDFImage({xref:this.xref,res:e,image:t,isInline:a,pdfFunctionFactory:this._pdfFunctionFactory,globalColorSpaceCache:this.globalColorSpaceCache,localColorSpaceCache:s});p=await i.createImageData(!0,!1);r.addImageOps(Lt,[p],g)}catch(e){const t=`Unable to decode inline image: "${e}".`;if(!c)throw new Error(t);warn(t)}return}let w=`img_${this.idFactory.createObjId()}`,S=!1,x=null;if(this.parsingType3Font)w=`${this.idFactory.getDocId()}_type3_${w}`;else if(i&&u){S=this.globalImageCache.shouldCache(u,this.pageIndex);if(S){assert(!a,"Cannot cache an inline image globally.");w=`${this.idFactory.getDocId()}_${w}`}}r.addDependency(w);m=Et;b=[w,d,f];r.addImageOps(m,b,g,y);if(S){x={objId:w,fn:m,args:b,optionalContent:g,hasMask:y,byteSize:0};if(this.globalImageCache.hasDecodeFailed(u)){this.globalImageCache.setData(u,x);this._sendImgData(w,null,S);return}if(d*f>25e4||y){const e=await this.handler.sendWithPromise("commonobj",[w,"CopyLocalImage",{imageRef:u}]);if(e){this.globalImageCache.setData(u,x);this.globalImageCache.addByteSize(u,e);return}}}PDFImage.buildImage({xref:this.xref,res:e,image:t,isInline:a,pdfFunctionFactory:this._pdfFunctionFactory,globalColorSpaceCache:this.globalColorSpaceCache,localColorSpaceCache:s}).then(async e=>{p=await e.createImageData(!1,l);p.dataLen=p.bitmap?p.width*p.height*4:p.data.length;p.ref=u;S&&this.globalImageCache.addByteSize(u,p.dataLen);return this._sendImgData(w,p,S)}).catch(e=>{warn(`Unable to decode image "${w}": "${e}".`);u&&this.globalImageCache.addDecodeFailed(u);return this._sendImgData(w,null,S)});if(i){const e={objId:w,fn:m,args:b,optionalContent:g,hasMask:y};n.set(i,u,e);if(u){this._regionalImageCache.set(null,u,e);if(S){assert(x,"The global cache-data must be available.");this.globalImageCache.setData(u,x)}}}}handleSMask(e,t,a,r,i,n,s){const o=e.get("G"),c={subtype:e.get("S").name,backdrop:e.get("BC")},l=e.get("TR");if(isPDFFunction(l)){const e=this._pdfFunctionFactory.create(l),t=new Uint8Array(256),a=new Float32Array(1);for(let r=0;r<256;r++){a[0]=r/255;e(a,0,a,0);t[r]=255*a[0]|0}c.transferMap=t}return this.buildFormXObject(t,o,c,a,r,i.state.clone({newPath:!0}),n,s)}handleTransferFunction(e){let t;if(Array.isArray(e))t=e;else{if(!isPDFFunction(e))return null;t=[e]}const a=[];let r=0,i=0;for(const e of t){const t=this.xref.fetchIfRef(e);r++;if(isName(t,"Identity")){a.push(null);continue}if(!isPDFFunction(t))return null;const n=this._pdfFunctionFactory.create(t),s=new Uint8Array(256),o=new Float32Array(1);for(let e=0;e<256;e++){o[0]=e/255;n(o,0,o,0);s[e]=255*o[0]|0}a.push(s);i++}return 1!==r&&4!==r||0===i?null:a}handleTilingType(e,t,a,r,i,n,s,o){const c=new OperatorList,l=Dict.merge({xref:this.xref,dictArray:[i.get("Resources"),a]});return this.getOperatorList({stream:r,task:s,resources:l,operatorList:c}).then(function(){const a=c.getIR(),r=getTilingPatternIR(a,i,t);n.addDependencies(c.dependencies);n.addOp(e,r);i.objId&&o.set(null,i.objId,{operatorListIR:a,dict:i})}).catch(e=>{if(!(e instanceof AbortException)){if(!this.options.ignoreErrors)throw e;warn(`handleTilingType - ignoring pattern: "${e}".`)}})}async handleSetFont(e,t,a,r,i,n,s=null,o=null){const c=t?.[0]instanceof Name?t[0].name:null,l=await this.loadFont(c,a,e,i,s,o);l.font.isType3Font&&r.addDependencies(l.type3Dependencies);n.font=l.font;l.send(this.handler);return l.loadedName}handleText(e,t){const a=t.font,r=a.charsToGlyphs(e);if(a.data){(!!(t.textRenderingMode&v)||"Pattern"===t.fillColorSpace.name||"Pattern"===t.strokeColorSpace.name||a.disableFontFace)&&PartialEvaluator.buildFontPaths(a,r,this.handler,this.options)}return r}ensureStateFont(e){if(e.font)return;const t=new FormatError("Missing setFont (Tf) operator before text rendering operator.");if(!this.options.ignoreErrors)throw t;warn(`ensureStateFont: "${t}".`)}async setGState({resources:e,gState:t,operatorList:a,cacheKey:r,task:i,stateManager:n,localGStateCache:s,localColorSpaceCache:o,seenRefs:c}){const l=t.objId;let h=!0;const u=[];let d=Promise.resolve();for(const[r,s]of t)switch(r){case"Type":break;case"LW":if("number"!=typeof s){warn(`Invalid LW (line width): ${s}`);break}u.push([r,Math.abs(s)]);break;case"LC":case"LJ":case"ML":case"D":case"RI":case"FL":case"CA":case"ca":u.push([r,s]);break;case"Font":h=!1;d=d.then(()=>this.handleSetFont(e,null,s[0],a,i,n.state).then(function(e){a.addDependency(e);u.push([r,[e,s[1]]])}));break;case"BM":u.push([r,normalizeBlendMode(s)]);break;case"SMask":if(isName(s,"None")){u.push([r,!1]);break}if(s instanceof Dict){h=!1;d=d.then(()=>this.handleSMask(s,e,a,i,n,o,c));u.push([r,!0])}else warn("Unsupported SMask type");break;case"TR":const t=this.handleTransferFunction(s);u.push([r,t]);break;case"OP":case"op":case"OPM":case"BG":case"BG2":case"UCR":case"UCR2":case"TR2":case"HT":case"SM":case"SA":case"AIS":case"TK":info("graphic state operator "+r);break;default:info("Unknown graphic state operator "+r)}await d;u.length>0&&a.addOp(be,[u]);h&&s.set(r,l,u)}loadFont(e,t,a,r,i=null,n=null){const errorFont=async()=>new TranslatedFont({loadedName:"g_font_error",font:new ErrorFont(`Font "${e}" is not available.`),dict:t});let s;if(t)t instanceof Ref&&(s=t);else{const t=a.get("Font");t&&(s=t.getRaw(e))}if(s){if(this.type3FontRefs?.has(s))return errorFont();if(this.fontCache.has(s))return this.fontCache.get(s);try{t=this.xref.fetchIfRef(s)}catch(e){warn(`loadFont - lookup failed: "${e}".`)}}if(!(t instanceof Dict)){if(!this.options.ignoreErrors&&!this.parsingType3Font){warn(`Font "${e}" is not available.`);return errorFont()}warn(`Font "${e}" is not available -- attempting to fallback to a default font.`);t=i||PartialEvaluator.fallbackFontDict}if(t.cacheKey&&this.fontCache.has(t.cacheKey))return this.fontCache.get(t.cacheKey);const{promise:o,resolve:c}=Promise.withResolvers();let l;try{l=this.preEvaluateFont(t);l.cssFontInfo=n}catch(e){warn(`loadFont - preEvaluateFont failed: "${e}".`);return errorFont()}const{descriptor:h,hash:u}=l,d=s instanceof Ref;let f;if(u&&h instanceof Dict){const e=h.fontAliases||=Object.create(null);if(e[u]){const t=e[u].aliasRef;if(d&&t&&this.fontCache.has(t)){this.fontCache.putAlias(s,t);return this.fontCache.get(s)}}else e[u]={fontID:this.idFactory.createFontId()};d&&(e[u].aliasRef=s);f=e[u].fontID}else f=this.idFactory.createFontId();assert(f?.startsWith("f"),'The "fontID" must be (correctly) defined.');if(d)this.fontCache.put(s,o);else{t.cacheKey=`cacheKey_${f}`;this.fontCache.put(t.cacheKey,o)}t.loadedName=`${this.idFactory.getDocId()}_${f}`;this.translateFont(l).then(async e=>{const i=new TranslatedFont({loadedName:t.loadedName,font:e,dict:t});if(e.isType3Font)try{await i.loadType3Data(this,a,r)}catch(e){throw new Error(`Type3 font load error: ${e}`)}c(i)}).catch(e=>{warn(`loadFont - translateFont failed: "${e}".`);c(new TranslatedFont({loadedName:t.loadedName,font:new ErrorFont(e?.message),dict:t}))});return o}buildPath(e,t,a){const{pathMinMax:r,pathBuffer:i}=a;switch(0|e){case Ie:{const e=a.currentPointX=t[0],n=a.currentPointY=t[1],s=t[2],o=t[3],c=e+s,l=n+o;0===s||0===o?i.push($t,e,n,zt,c,l,Jt):i.push($t,e,n,zt,c,n,zt,c,l,zt,e,l,Jt);Util.rectBoundingBox(e,n,c,l,r);break}case xe:{const e=a.currentPointX=t[0],n=a.currentPointY=t[1];i.push($t,e,n);Util.pointBoundingBox(e,n,r);break}case Ae:{const e=a.currentPointX=t[0],n=a.currentPointY=t[1];i.push(zt,e,n);Util.pointBoundingBox(e,n,r);break}case ke:{const e=a.currentPointX,n=a.currentPointY,[s,o,c,l,h,u]=t;a.currentPointX=h;a.currentPointY=u;i.push(Vt,s,o,c,l,h,u);Util.bezierBoundingBox(e,n,s,o,c,l,h,u,r);break}case Ce:{const e=a.currentPointX,n=a.currentPointY,[s,o,c,l]=t;a.currentPointX=c;a.currentPointY=l;i.push(Vt,e,n,s,o,c,l);Util.bezierBoundingBox(e,n,e,n,s,o,c,l,r);break}case ve:{const e=a.currentPointX,n=a.currentPointY,[s,o,c,l]=t;a.currentPointX=c;a.currentPointY=l;i.push(Vt,s,o,c,l,c,l);Util.bezierBoundingBox(e,n,s,o,c,l,c,l,r);break}case Fe:i.push(Jt)}}_getColorSpace(e,t,a){return ColorSpaceUtils.parse({cs:e,xref:this.xref,resources:t,pdfFunctionFactory:this._pdfFunctionFactory,globalColorSpaceCache:this.globalColorSpaceCache,localColorSpaceCache:a,asyncIfNotCached:!0})}async _handleColorSpace(e){try{return await e}catch(e){if(e instanceof AbortException)return null;if(this.options.ignoreErrors){warn(`_handleColorSpace - ignoring ColorSpace: "${e}".`);return null}throw e}}parseShading({shading:e,resources:t,localColorSpaceCache:a,localShadingPatternCache:r}){let i,n=r.get(e);if(n)return n;try{i=Pattern.parseShading(e,this.xref,t,this._pdfFunctionFactory,this.globalColorSpaceCache,a).getIR()}catch(t){if(t instanceof AbortException)return null;if(this.options.ignoreErrors){warn(`parseShading - ignoring shading: "${t}".`);r.set(e,null);return null}throw t}n=`pattern_${this.idFactory.createObjId()}`;this.parsingType3Font&&(n=`${this.idFactory.getDocId()}_type3_${n}`);r.set(e,n);if(this.parsingType3Font){const e=[],t=PatternInfo.write(i);e.push(t);this.handler.send("commonobj",[n,"Pattern",t],e)}else this.handler.send("obj",[n,this.pageIndex,"Pattern",i]);return n}handleColorN(e,t,a,r,i,n,s,o,c,l){const h=a.pop();if(h instanceof Name){const u=i.getRaw(h.name),d=u instanceof Ref&&c.getByRef(u);if(d)try{const i=r.base?r.base.getRgbHex(a,0):null,n=getTilingPatternIR(d.operatorListIR,d.dict,i);e.addOp(t,n);return}catch{}const f=this.xref.fetchIfRef(u);if(f){const i=f instanceof BaseStream?f.dict:f,h=i.get("PatternType");if(h===xn){const o=r.base?r.base.getRgbHex(a,0):null;return this.handleTilingType(t,o,n,f,i,e,s,c)}if(h===An){const a=i.get("Shading"),r=this.parseShading({shading:a,resources:n,localColorSpaceCache:o,localShadingPatternCache:l});if(r){const a=lookupMatrix(i.getArray("Matrix"),null);e.addOp(t,["Shading",r,a])}return}throw new FormatError(`Unknown PatternType: ${h}`)}}throw new FormatError(`Unknown PatternName: ${h}`)}_parseVisibilityExpression(e,t,a){if(++t>10){warn("Visibility expression is too deeply nested");return}const r=e.length,i=this.xref.fetchIfRef(e[0]);if(!(r<2)&&i instanceof Name){switch(i.name){case"And":case"Or":case"Not":a.push(i.name);break;default:warn(`Invalid operator ${i.name} in visibility expression`);return}for(let i=1;i0)return{type:"OCMD",expression:t}}const t=a.get("OCGs");if(Array.isArray(t)||t instanceof Dict){const e=[];if(Array.isArray(t))for(const a of t)e.push(a.toString());else e.push(t.objId);return{type:r,ids:e,policy:a.get("P")instanceof Name?a.get("P").name:null,expression:null}}if(t instanceof Ref)return{type:r,id:t.toString()}}return null}async getOperatorList({stream:e,task:t,resources:a,operatorList:r,initialState:i=null,fallbackFontDict:n=null,prevRefs:s=null}){if(e.isAsync){const t=await e.asyncGetBytes();t&&(e=new Stream(t,0,t.length,e.dict))}const o=e.dict?.objId,c=new RefSet(s);if(o){if(s?.has(o))throw new Error(`getOperatorList - ignoring circular reference: ${o}`);c.put(o)}a||=Dict.empty;i||=new EvalState;if(!r)throw new Error('getOperatorList: missing "operatorList" parameter');const l=this,h=this.xref,u=new LocalImageCache,d=new LocalColorSpaceCache,f=new LocalGStateCache,g=new LocalTilingPatternCache,p=new Map,m=a.get("XObject")||Dict.empty,b=a.get("Pattern")||Dict.empty,y=new StateManager(i),w=new EvaluatorPreprocessor(e,h,y),S=new TimeSlotManager;function closePendingRestoreOPS(e){for(let e=0,t=w.savedStatesDepth;e{y.state.fillColorSpace=e||ColorSpaceUtils.gray}));return}case it:{const t=l._getColorSpace(e[0],a,d);if(t instanceof ColorSpace){y.state.strokeColorSpace=t;continue}next(l._handleColorSpace(t).then(e=>{y.state.strokeColorSpace=e||ColorSpaceUtils.gray}));return}case ct:C=y.state.fillColorSpace;e=[C.getRgbHex(e,0)];i=ft;break;case st:C=y.state.strokeColorSpace;e=[C.getRgbHex(e,0)];i=dt;break;case ut:y.state.fillColorSpace=ColorSpaceUtils.gray;e=[ColorSpaceUtils.gray.getRgbHex(e,0)];i=ft;break;case ht:y.state.strokeColorSpace=ColorSpaceUtils.gray;e=[ColorSpaceUtils.gray.getRgbHex(e,0)];i=dt;break;case pt:y.state.fillColorSpace=ColorSpaceUtils.cmyk;e=[ColorSpaceUtils.cmyk.getRgbHex(e,0)];i=ft;break;case gt:y.state.strokeColorSpace=ColorSpaceUtils.cmyk;e=[ColorSpaceUtils.cmyk.getRgbHex(e,0)];i=dt;break;case ft:y.state.fillColorSpace=ColorSpaceUtils.rgb;e=[ColorSpaceUtils.rgb.getRgbHex(e,0)];break;case dt:y.state.strokeColorSpace=ColorSpaceUtils.rgb;e=[ColorSpaceUtils.rgb.getRgbHex(e,0)];break;case lt:C=y.state.patternFillColorSpace;if(!C){if(isNumberArray(e,null)){e=[ColorSpaceUtils.gray.getRgbHex(e,0)];i=ft;break}e=[];i=Wt;break}if("Pattern"===C.name){next(l.handleColorN(r,lt,e,C,b,a,t,d,g,p));return}e=[C.getRgbHex(e,0)];i=ft;break;case ot:C=y.state.patternStrokeColorSpace;if(!C){if(isNumberArray(e,null)){e=[ColorSpaceUtils.gray.getRgbHex(e,0)];i=dt;break}e=[];i=Ht;break}if("Pattern"===C.name){next(l.handleColorN(r,ot,e,C,b,a,t,d,g,p));return}e=[C.getRgbHex(e,0)];i=dt;break;case mt:let T;try{const t=a.get("Shading");if(!t)throw new FormatError("No shading resource found");T=t.get(e[0].name);if(!T)throw new FormatError("No shading object found")}catch(e){if(e instanceof AbortException)continue;if(l.options.ignoreErrors){warn(`getOperatorList - ignoring Shading: "${e}".`);continue}throw e}const O=l.parseShading({shading:T,resources:a,localColorSpaceCache:d,localShadingPatternCache:p});if(!O)continue;e=[O];i=mt;break;case be:F=e[0]instanceof Name;v=e[0].name;if(F){const t=f.getByName(v);if(t){t.length>0&&r.addOp(be,[t]);e=null;continue}}next(new Promise(function(e,i){if(!F)throw new FormatError("GState must be referred to by name.");const n=a.get("ExtGState");if(!(n instanceof Dict))throw new FormatError("ExtGState should be a dictionary.");const s=n.get(v);if(!(s instanceof Dict))throw new FormatError("GState should be a dictionary.");l.setGState({resources:a,gState:s,operatorList:r,cacheKey:v,task:t,stateManager:y,localGStateCache:f,localColorSpaceCache:d,seenRefs:c}).then(e,i)}).catch(function(e){if(!(e instanceof AbortException)){if(!l.options.ignoreErrors)throw e;warn(`getOperatorList - ignoring ExtGState: "${e}".`)}}));return;case he:{const[t]=e;if("number"!=typeof t){warn(`Invalid setLineWidth: ${t}`);continue}e[0]=Math.abs(t);break}case ge:{const t=e[1];if("number"!=typeof t){warn(`Invalid setDash: ${t}`);continue}const a=e[0];if(!Array.isArray(a)){warn(`Invalid setDash: ${a}`);continue}a.some(e=>"number"!=typeof e)&&(e[0]=a.filter(e=>"number"==typeof e));break}case xe:case Ae:case ke:case Ce:case ve:case Fe:case Ie:l.buildPath(i,e,y.state);continue;case Te:case Oe:case De:case Me:case Re:case Be:case Ne:case Pe:case Ee:{const{state:{pathBuffer:e,pathMinMax:t}}=y;i!==Oe&&i!==Ne&&i!==Pe||e.push(Jt);if(0===e.length)r.addOp(qt,[i,[null],null]);else{r.addOp(qt,[i,[new Float32Array(e)],t.slice()]);e.length=0;t.set([1/0,1/0,-1/0,-1/0],0)}continue}case Je:r.addOp(i,[new Float32Array(e)]);continue;case xt:case At:case Ft:case It:continue;case Ct:if(!(e[0]instanceof Name)){warn(`Expected name for beginMarkedContentProps arg0=${e[0]}`);r.addOp(Ct,["OC",null]);continue}if("OC"===e[0].name){next(l.parseMarkedContentProps(e[1],a).then(e=>{r.addOp(Ct,["OC",e])}).catch(e=>{if(!(e instanceof AbortException)){if(!l.options.ignoreErrors)throw e;warn(`getOperatorList - ignoring beginMarkedContentProps: "${e}".`);r.addOp(Ct,["OC",null])}}));return}e=[e[0].name,e[1]instanceof Dict?e[1].get("MCID"):null];break;default:if(null!==e){for(x=0,k=e.length;x{if(!(e instanceof AbortException)){if(!this.options.ignoreErrors)throw e;warn(`getOperatorList - ignoring errors during "${t.name}" task: "${e}".`);closePendingRestoreOPS()}})}async getTextContent({stream:e,task:a,resources:r,stateManager:i=null,includeMarkedContent:n=!1,sink:s,seenStyles:o=new Set,viewBox:c,lang:l=null,markedContentData:h=null,disableNormalization:u=!1,keepWhiteSpace:d=!1,prevRefs:f=null,intersector:g=null}){if(e.isAsync){const t=await e.asyncGetBytes();t&&(e=new Stream(t,0,t.length,e.dict))}const p=e.dict?.objId,m=new RefSet(f);if(p){if(f?.has(p))throw new Error(`getTextContent - ignoring circular reference: ${p}`);m.put(p)}r||=Dict.empty;i||=new StateManager(new TextState);n&&(h||={level:0});const b={items:[],styles:Object.create(null),lang:l},y={initialized:!1,str:[],totalWidth:0,totalHeight:0,width:0,height:0,vertical:!1,prevTransform:null,textAdvanceScale:0,spaceInFlowMin:0,spaceInFlowMax:0,trackingSpaceMin:1/0,negativeSpaceMax:-1/0,notASpace:-1/0,transform:null,fontName:null,hasEOL:!1},w=[" "," "];let S=0;function saveLastChar(e){const t=(S+1)%2,a=" "!==w[S]&&" "===w[t];w[S]=e;S=t;return!d&&a}function shouldAddWhitepsace(){return!d&&" "!==w[S]&&" "===w[(S+1)%2]}function resetLastChars(){w[0]=w[1]=" ";S=0}const x=this,k=this.xref,C=[];let v=null;const F=new LocalImageCache,T=new LocalGStateCache,O=new EvaluatorPreprocessor(e,k,i);let D;function pushWhitespace({width:e=0,height:t=0,transform:a=y.prevTransform,fontName:r=y.fontName}){g?.addExtraChar(" ");b.items.push({str:" ",dir:"ltr",width:e,height:t,transform:a,fontName:r,hasEOL:!1})}function getCurrentTextTransform(){const e=D.font,a=[D.fontSize*D.textHScale,0,0,D.fontSize,0,D.textRise];if(e.isType3Font&&(D.fontSize<=1||e.isCharBBox)&&!isArrayEqual(D.fontMatrix,t)){const t=e.bbox[3]-e.bbox[1];t>0&&(a[3]*=t*D.fontMatrix[3])}return Util.transform(D.ctm,Util.transform(D.textMatrix,a))}function ensureTextContentItem(){if(y.initialized)return y;const{font:e,loadedName:t}=D;if(!o.has(t)){o.add(t);b.styles[t]={fontFamily:e.fallbackName,ascent:e.ascent,descent:e.descent,vertical:e.vertical};if(x.options.fontExtraProperties&&e.systemFontInfo){const a=b.styles[t];a.fontSubstitution=e.systemFontInfo.css;a.fontSubstitutionLoadedName=e.systemFontInfo.loadedName}}y.fontName=t;const a=y.transform=getCurrentTextTransform();if(e.vertical){y.width=y.totalWidth=Math.hypot(a[0],a[1]);y.height=y.totalHeight=0;y.vertical=!0}else{y.width=y.totalWidth=0;y.height=y.totalHeight=Math.hypot(a[2],a[3]);y.vertical=!1}const r=Math.hypot(D.textLineMatrix[0],D.textLineMatrix[1]),i=Math.hypot(D.ctm[0],D.ctm[1]);y.textAdvanceScale=i*r;const{fontSize:n}=D;y.trackingSpaceMin=.102*n;y.notASpace=.03*n;y.negativeSpaceMax=-.2*n;y.spaceInFlowMin=.102*n;y.spaceInFlowMax=.6*n;y.hasEOL=!1;y.initialized=!0;return y}function updateAdvanceScale(){if(!y.initialized)return;const e=Math.hypot(D.textLineMatrix[0],D.textLineMatrix[1]),t=Math.hypot(D.ctm[0],D.ctm[1])*e;if(t!==y.textAdvanceScale){if(y.vertical){y.totalHeight+=y.height*y.textAdvanceScale;y.height=0}else{y.totalWidth+=y.width*y.textAdvanceScale;y.width=0}y.textAdvanceScale=t}}function runBidiTransform(e){let t=e.str.join("");u||(t=function normalizeUnicode(e){if(!ra){ra=/([\u00a0\u00b5\u037e\u0eb3\u2000-\u200a\u202f\u2126\ufb00-\ufb04\ufb06\ufb20-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufba1\ufba4-\ufba9\ufbae-\ufbb1\ufbd3-\ufbdc\ufbde-\ufbe7\ufbea-\ufbf8\ufbfc-\ufbfd\ufc00-\ufc5d\ufc64-\ufcf1\ufcf5-\ufd3d\ufd88\ufdf4\ufdfa-\ufdfb\ufe71\ufe77\ufe79\ufe7b\ufe7d]+)|(\ufb05+)/gu;ia=new Map([["ſt","ſt"]])}return e.replaceAll(ra,(e,t,a)=>t?t.normalize("NFKC"):ia.get(a))}(t));const a=bidi(t,-1,e.vertical);return{str:a.str,dir:a.dir,width:Math.abs(e.totalWidth),height:Math.abs(e.totalHeight),transform:e.transform,fontName:e.fontName,hasEOL:e.hasEOL}}async function handleSetFont(e,i){const n=await x.loadFont(e,i,r,a);D.loadedName=n.loadedName;D.font=n.font;D.fontMatrix=n.font.fontMatrix||t}function applyInverseRotation(e,t,a){const r=Math.hypot(a[0],a[1]);return[(a[0]*e+a[1]*t)/r,(a[2]*e+a[3]*t)/r]}function compareWithLastPosition(e){const t=getCurrentTextTransform();let a=t[4],r=t[5];if(D.font?.vertical){if(ac[2]||r+ec[3])return!1}else if(a+ec[2]||rc[3])return!1;if(!D.font||!y.prevTransform)return!0;let i=y.prevTransform[4],n=y.prevTransform[5];if(i===a&&n===r)return!0;let s=-1;t[0]&&0===t[1]&&0===t[2]?s=t[0]>0?0:180:t[1]&&0===t[0]&&0===t[3]&&(s=t[1]>0?90:270);switch(s){case 0:break;case 90:[a,r]=[r,a];[i,n]=[n,i];break;case 180:[a,r,i,n]=[-a,-r,-i,-n];break;case 270:[a,r]=[-r,-a];[i,n]=[-n,-i];break;default:[a,r]=applyInverseRotation(a,r,t);[i,n]=applyInverseRotation(i,n,y.prevTransform)}if(D.font.vertical){const e=(n-r)/y.textAdvanceScale,t=a-i,s=Math.sign(y.height);if(e.5*y.width){appendEOL();return!0}resetLastChars();flushTextContentItem();return!0}if(Math.abs(t)>y.width){appendEOL();return!0}e<=s*y.notASpace&&resetLastChars();if(e<=s*y.trackingSpaceMin)if(shouldAddWhitepsace()){resetLastChars();flushTextContentItem();pushWhitespace({height:Math.abs(e)})}else y.height+=e;else if(!addFakeSpaces(e,y.prevTransform,s))if(0===y.str.length){resetLastChars();pushWhitespace({height:Math.abs(e)})}else y.height+=e;Math.abs(t)>.25*y.width&&flushTextContentItem();return!0}const o=(a-i)/y.textAdvanceScale,l=r-n,h=Math.sign(y.width);if(o.5*y.height){appendEOL();return!0}resetLastChars();flushTextContentItem();return!0}if(Math.abs(l)>y.height){appendEOL();return!0}o<=h*y.notASpace&&resetLastChars();if(o<=h*y.trackingSpaceMin)if(shouldAddWhitepsace()){resetLastChars();flushTextContentItem();pushWhitespace({width:Math.abs(o)})}else y.width+=o;else if(!addFakeSpaces(o,y.prevTransform,h))if(0===y.str.length){resetLastChars();pushWhitespace({width:Math.abs(o)})}else y.width+=o;Math.abs(l)>.25*y.height&&flushTextContentItem();return!0}function buildTextContentItem({chars:e,extraSpacing:t}){const a=D.font;if(!e){const e=D.charSpacing+t;e&&(a.vertical?D.translateTextMatrix(0,-e):D.translateTextMatrix(e*D.textHScale,0));d&&compareWithLastPosition(0);return}const r=a.charsToGlyphs(e),i=D.fontMatrix[0]*D.fontSize;for(let e=0,n=r.length;e0){const e=C.join("");C.length=0;buildTextContentItem({chars:e,extraSpacing:0})}break;case Ze:if(!i.state.font){x.ensureStateFont(i.state);continue}buildTextContentItem({chars:w[0],extraSpacing:0});break;case et:if(!i.state.font){x.ensureStateFont(i.state);continue}D.carriageReturn();buildTextContentItem({chars:w[0],extraSpacing:0});break;case tt:if(!i.state.font){x.ensureStateFont(i.state);continue}D.wordSpacing=w[0];D.charSpacing=w[1];D.carriageReturn();buildTextContentItem({chars:w[2],extraSpacing:0});break;case St:flushTextContentItem();v??=r.get("XObject")||Dict.empty;y=w[0]instanceof Name;p=w[0].name;if(y&&F.getByName(p))break;next(new Promise(function(e,t){if(!y)throw new FormatError("XObject must be referred to by name.");let f=v.getRaw(p);if(f instanceof Ref){if(F.getByRef(f)){e();return}if(x.globalImageCache.getData(f,x.pageIndex)){e();return}f=k.fetch(f)}if(!(f instanceof BaseStream))throw new FormatError("XObject should be a stream");const{dict:g}=f,b=g.get("Subtype");if(!(b instanceof Name))throw new FormatError("XObject should have a Name subtype");if("Form"!==b.name){F.set(p,g.objId,!0);e();return}const w=i.state.clone(),S=new StateManager(w),C=lookupMatrix(g.getArray("Matrix"),null);C&&S.transform(C);const T=g.get("Resources");enqueueChunk();const O={enqueueInvoked:!1,enqueue(e,t){this.enqueueInvoked=!0;s.enqueue(e,t)},get desiredSize(){return s.desiredSize??0},get ready(){return s.ready}};x.getTextContent({stream:f,task:a,resources:T instanceof Dict?T:r,stateManager:S,includeMarkedContent:n,sink:s&&O,seenStyles:o,viewBox:c,lang:l,markedContentData:h,disableNormalization:u,keepWhiteSpace:d,prevRefs:m}).then(function(){O.enqueueInvoked||F.set(p,g.objId,!0);e()},t)}).catch(function(e){if(!(e instanceof AbortException)){if(!x.options.ignoreErrors)throw e;warn(`getTextContent - ignoring XObject: "${e}".`)}}));return;case be:y=w[0]instanceof Name;p=w[0].name;if(y&&T.getByName(p))break;next(new Promise(function(e,t){if(!y)throw new FormatError("GState must be referred to by name.");const a=r.get("ExtGState");if(!(a instanceof Dict))throw new FormatError("ExtGState should be a dictionary.");const i=a.get(p);if(!(i instanceof Dict))throw new FormatError("GState should be a dictionary.");const n=i.get("Font");if(n){flushTextContentItem();D.fontName=null;D.fontSize=n[1];handleSetFont(null,n[0]).then(e,t)}else{T.set(p,i.objId,!0);e()}}).catch(function(e){if(!(e instanceof AbortException)){if(!x.options.ignoreErrors)throw e;warn(`getTextContent - ignoring ExtGState: "${e}".`)}}));return;case kt:flushTextContentItem();if(n){h.level++;b.items.push({type:"beginMarkedContent",tag:w[0]instanceof Name?w[0].name:null})}break;case Ct:flushTextContentItem();if(n){h.level++;let e=null;w[1]instanceof Dict&&(e=w[1].get("MCID"));b.items.push({type:"beginMarkedContentProps",id:Number.isInteger(e)?`${x.idFactory.getPageObjId()}_mc${e}`:null,tag:w[0]instanceof Name?w[0].name:null})}break;case vt:flushTextContentItem();if(n){if(0===h.level)break;h.level--;b.items.push({type:"endMarkedContent"})}break;case we:!e||e.font===D.font&&e.fontSize===D.fontSize&&e.fontName===D.fontName||flushTextContentItem()}if(b.items.length>=(s?.desiredSize??1)){g=!0;break}}if(g)next(kn);else{flushTextContentItem();enqueueChunk();e()}}).catch(e=>{if(!(e instanceof AbortException)){if(!this.options.ignoreErrors)throw e;warn(`getTextContent - ignoring errors during "${a.name}" task: "${e}".`);flushTextContentItem();enqueueChunk()}})}async extractDataStructures(e,t){const a=this.xref;let r;const i=this.readToUnicode(t.toUnicode);if(t.composite){const a=e.get("CIDSystemInfo");a instanceof Dict&&!t.cidSystemInfo&&(t.cidSystemInfo={registry:stringToPDFString(a.get("Registry")),ordering:stringToPDFString(a.get("Ordering")),supplement:a.get("Supplement")});try{const t=e.get("CIDToGIDMap");t instanceof BaseStream&&(r=t.getBytes())}catch(e){if(!this.options.ignoreErrors)throw e;warn(`extractDataStructures - ignoring CIDToGIDMap data: "${e}".`)}}const n=[];let s,o=null;if(e.has("Encoding")){s=e.get("Encoding");if(s instanceof Dict){o=s.get("BaseEncoding");o=o instanceof Name?o.name:null;if(s.has("Differences")){const e=s.get("Differences");let t=0;for(const r of e){const e=a.fetchIfRef(r);if("number"==typeof e)t=e;else{if(!(e instanceof Name))throw new FormatError(`Invalid entry in 'Differences' array: ${e}`);n[t++]=e.name}}}}else if(s instanceof Name)o=s.name;else{const e="Encoding is not a Name nor a Dict";if(!this.options.ignoreErrors)throw new FormatError(e);warn(e)}"MacRomanEncoding"!==o&&"MacExpertEncoding"!==o&&"WinAnsiEncoding"!==o&&(o=null)}const c=!t.file||t.isInternalFont,l=qr()[t.name];o&&c&&l&&(o=null);if("WinAnsiEncoding"===o&&c&&t.name?.charCodeAt(0)>=183){const e=t.name;if(["ËÎÌå","ºÚÌå","¿¬Ìå","·ÂËÎ","¿¬Ìå_GB2312","·ÂËÎ_GB2312","Á¥Êé","ÐÂËÎ"].includes(e)){o=null;t.defaultEncoding="Adobe-GB1-UCS2";t.composite=!0;t.cidEncoding=Name.get("GBK-EUC-H");const e=await CMapFactory.create({encoding:t.cidEncoding,fetchBuiltInCMap:this._fetchBuiltInCMapBound,useCMap:null});t.cMap=e;t.vertical=t.cMap.vertical;t.cidSystemInfo={registry:"Adobe",ordering:"GB1",supplement:0}}}if(o)t.defaultEncoding=getEncoding(o);else{let e=!!(t.flags&kr);const a=!!(t.flags&Cr);if("TrueType"===t.type&&e&&a&&0!==n.length){t.flags&=~kr;e=!1}s=hr;"TrueType"!==t.type||a||(s=ur);if(e||l){s=lr;c&&(/Symbol/i.test(t.name)?s=dr:/Dingbats/i.test(t.name)?s=fr:/Wingdings/i.test(t.name)&&(s=ur))}t.defaultEncoding=s}t.differences=n;t.baseEncodingName=o;t.hasEncoding=!!o||n.length>0;t.dict=e;t.toUnicode=await i;const h=await this.buildToUnicode(t);t.toUnicode=h;r&&(t.cidToGidMap=this.readCidToGidMap(r,h));return t}_simpleFontToUnicode(e,t=!1){assert(!e.composite,"Must be a simple font.");const a=[],r=e.defaultEncoding.slice(),i=e.baseEncodingName,n=e.differences;for(const e in n){const t=n[e];".notdef"!==t&&(r[e]=t)}const s=gr();for(const n in r){let o=r[n];if(""===o)continue;let c=s[o];if(void 0!==c){a[n]=String.fromCharCode(c);continue}let l=0;switch(o[0]){case"G":3===o.length&&(l=parseInt(o.substring(1),16));break;case"g":5===o.length&&(l=parseInt(o.substring(1),16));break;case"C":case"c":if(o.length>=3&&o.length<=4){const a=o.substring(1);if(t){l=parseInt(a,16);break}l=+a;if(Number.isNaN(l)&&Number.isInteger(parseInt(a,16)))return this._simpleFontToUnicode(e,!0)}break;case"u":c=getUnicodeForGlyph(o,s);-1!==c&&(l=c);break;default:switch(o){case"f_h":case"f_t":case"T_h":a[n]=o.replaceAll("_","");continue}}if(l>0&&l<=1114111&&Number.isInteger(l)){if(i&&l===+n){const e=getEncoding(i);if(e&&(o=e[n])){a[n]=String.fromCharCode(s[o]);continue}}a[n]=String.fromCodePoint(l)}}return a}async buildToUnicode(e){e.hasIncludedToUnicodeMap=e.toUnicode?.length>0;if(e.hasIncludedToUnicodeMap){!e.composite&&e.hasEncoding&&(e.fallbackToUnicode=this._simpleFontToUnicode(e));return e.toUnicode}if(!e.composite)return new ToUnicodeMap(this._simpleFontToUnicode(e));if(e.composite&&(e.cMap.builtInCMap&&!(e.cMap instanceof IdentityCMap)||"Adobe"===e.cidSystemInfo?.registry&&("GB1"===e.cidSystemInfo.ordering||"CNS1"===e.cidSystemInfo.ordering||"Japan1"===e.cidSystemInfo.ordering||"Korea1"===e.cidSystemInfo.ordering))){const{registry:t,ordering:a}=e.cidSystemInfo,r=Name.get(`${t}-${a}-UCS2`),i=await CMapFactory.create({encoding:r,fetchBuiltInCMap:this._fetchBuiltInCMapBound,useCMap:null}),n=[],s=[];e.cMap.forEach(function(e,t){if(t>65535)throw new FormatError("Max size of CID is 65,535");const a=i.lookup(t);if(a){s.length=0;for(let e=0,t=a.length;e>1;(0!==i||t.has(n))&&(a[n]=i)}return a}extractWidths(e,t,a){const r=this.xref;let i=[],n=0;const s=[];let o;if(a.composite){const t=e.get("DW");n="number"==typeof t?Math.ceil(t):1e3;const c=e.get("W");if(Array.isArray(c))for(let e=0,t=c.length;e{const t=c.get(e),r=new OperatorList;return n.getOperatorList({stream:t,task:a,resources:l,operatorList:r}).then(()=>{switch(r.fnArray[0]){case rt:this.#ge(r,b);break;case at:b||this.#pe(r)}h[e]=r.getIR();for(const e of r.dependencies)i.add(e)}).catch(function(t){warn(`Type3 font resource "${e}" is not available.`);const a=new OperatorList;h[e]=a.getIR()})});this.#fe=o.then(()=>{r.charProcOperatorList=h;if(this._bbox){r.isCharBBox=!0;r.bbox=this._bbox}});return this.#fe}#ge(e,t=NaN){const a=Util.normalizeRect(e.argsArray[0].slice(2)),r=a[2]-a[0],i=a[3]-a[1],n=Math.hypot(r,i);if(0===r||0===i){e.fnArray.splice(0,1);e.argsArray.splice(0,1)}else if(0===t||Math.round(n/t)>=10){this._bbox??=[1/0,1/0,-1/0,-1/0];Util.rectBoundingBox(...a,this._bbox)}let s=0,o=e.length;for(;s=xe&&n<=Ee;if(i.variableArgs)o>s&&info(`Command ${r}: expected [0, ${s}] args, but received ${o} args.`);else{if(o!==s){const e=this.nonProcessedArgs;for(;o>s;){e.push(t.shift());o--}for(;oEvaluatorPreprocessor.MAX_INVALID_PATH_OPS)throw new FormatError(`Invalid ${e}`);warn(`Skipping ${e}`);null!==t&&(t.length=0);continue}}this.preprocessCommand(n,t);e.fn=n;e.args=t;return!0}if(a===sa)return!1;if(null!==a){null===t&&(t=[]);t.push(a);if(t.length>33)throw new FormatError("Too many arguments")}}}preprocessCommand(e,t){switch(0|e){case ye:this.stateManager.save();break;case we:this.stateManager.restore();break;case Se:this.stateManager.transform(t)}}}class DefaultAppearanceEvaluator extends EvaluatorPreprocessor{constructor(e){super(new StringStream(e))}parse(){const e={fn:0,args:[]},t={fontSize:0,fontName:"",fontColor:new Uint8ClampedArray(3)};try{for(;;){e.args.length=0;if(!this.read(e))break;if(0!==this.savedStatesDepth)continue;const{fn:a,args:r}=e;switch(0|a){case Ge:const[e,a]=r;e instanceof Name&&(t.fontName=e.name);"number"==typeof a&&a>0&&(t.fontSize=a);break;case ft:ColorSpaceUtils.rgb.getRgbItem(r,0,t.fontColor,0);break;case ut:ColorSpaceUtils.gray.getRgbItem(r,0,t.fontColor,0);break;case pt:ColorSpaceUtils.cmyk.getRgbItem(r,0,t.fontColor,0)}}}catch(e){warn(`parseDefaultAppearance - ignoring errors: "${e}".`)}return t}}function parseDefaultAppearance(e){return new DefaultAppearanceEvaluator(e).parse()}class AppearanceStreamEvaluator extends EvaluatorPreprocessor{constructor(e,t,a,r){super(e);this.stream=e;this.evaluatorOptions=t;this.xref=a;this.globalColorSpaceCache=r;this.resources=e.dict?.get("Resources")}parse(){const e={fn:0,args:[]};let t={scaleFactor:1,fontSize:0,fontName:"",fontColor:new Uint8ClampedArray(3),fillColorSpace:ColorSpaceUtils.gray},a=!1;const r=[];try{for(;;){e.args.length=0;if(a||!this.read(e))break;const{fn:i,args:n}=e;switch(0|i){case ye:r.push({scaleFactor:t.scaleFactor,fontSize:t.fontSize,fontName:t.fontName,fontColor:t.fontColor.slice(),fillColorSpace:t.fillColorSpace});break;case we:t=r.pop()||t;break;case Je:t.scaleFactor*=Math.hypot(n[0],n[1]);break;case Ge:const[e,i]=n;e instanceof Name&&(t.fontName=e.name);"number"==typeof i&&i>0&&(t.fontSize=i*t.scaleFactor);break;case nt:t.fillColorSpace=ColorSpaceUtils.parse({cs:n[0],xref:this.xref,resources:this.resources,pdfFunctionFactory:this._pdfFunctionFactory,globalColorSpaceCache:this.globalColorSpaceCache,localColorSpaceCache:this._localColorSpaceCache});break;case ct:t.fillColorSpace.getRgbItem(n,0,t.fontColor,0);break;case ft:ColorSpaceUtils.rgb.getRgbItem(n,0,t.fontColor,0);break;case ut:ColorSpaceUtils.gray.getRgbItem(n,0,t.fontColor,0);break;case pt:ColorSpaceUtils.cmyk.getRgbItem(n,0,t.fontColor,0);break;case Ze:case Qe:case et:case tt:a=!0}}}catch(e){warn(`parseAppearanceStream - ignoring errors: "${e}".`)}this.stream.reset();delete t.scaleFactor;delete t.fillColorSpace;return t}get _localColorSpaceCache(){return shadow(this,"_localColorSpaceCache",new LocalColorSpaceCache)}get _pdfFunctionFactory(){return shadow(this,"_pdfFunctionFactory",new PDFFunctionFactory({xref:this.xref,isEvalSupported:this.evaluatorOptions.isEvalSupported}))}}function getPdfColor(e,t){if(e[0]===e[1]&&e[1]===e[2]){return`${numberToString(e[0]/255)} ${t?"g":"G"}`}return Array.from(e,e=>numberToString(e/255)).join(" ")+" "+(t?"rg":"RG")}class FakeUnicodeFont{constructor(e,t){this.xref=e;this.widths=null;this.firstChar=1/0;this.lastChar=-1/0;this.fontFamily=t;const a=new OffscreenCanvas(1,1);this.ctxMeasure=a.getContext("2d",{willReadFrequently:!0});FakeUnicodeFont._fontNameId||(FakeUnicodeFont._fontNameId=1);this.fontName=Name.get(`InvalidPDFjsFont_${t}_${FakeUnicodeFont._fontNameId++}`)}get fontDescriptorRef(){if(!FakeUnicodeFont._fontDescriptorRef){const e=new Dict(this.xref);e.setIfName("Type","FontDescriptor");e.set("FontName",this.fontName);e.set("FontFamily","MyriadPro Regular");e.set("FontBBox",[0,0,0,0]);e.setIfName("FontStretch","Normal");e.set("FontWeight",400);e.set("ItalicAngle",0);FakeUnicodeFont._fontDescriptorRef=this.xref.getNewPersistentRef(e)}return FakeUnicodeFont._fontDescriptorRef}get descendantFontRef(){const e=new Dict(this.xref);e.set("BaseFont",this.fontName);e.setIfName("Type","Font");e.setIfName("Subtype","CIDFontType0");e.setIfName("CIDToGIDMap","Identity");e.set("FirstChar",this.firstChar);e.set("LastChar",this.lastChar);e.set("FontDescriptor",this.fontDescriptorRef);e.set("DW",1e3);const t=[],a=[...this.widths.entries()].sort();let r=null,i=null;for(const[e,n]of a)if(r)if(e===r+i.length)i.push(n);else{t.push(r,i);r=e;i=[n]}else{r=e;i=[n]}r&&t.push(r,i);e.set("W",t);const n=new Dict(this.xref);n.set("Ordering","Identity");n.set("Registry","Adobe");n.set("Supplement",0);e.set("CIDSystemInfo",n);return this.xref.getNewPersistentRef(e)}get baseFontRef(){const e=new Dict(this.xref);e.set("BaseFont",this.fontName);e.setIfName("Type","Font");e.setIfName("Subtype","Type0");e.setIfName("Encoding","Identity-H");e.set("DescendantFonts",[this.descendantFontRef]);e.setIfName("ToUnicode","Identity-H");return this.xref.getNewPersistentRef(e)}get resources(){const e=new Dict(this.xref),t=new Dict(this.xref);t.set(this.fontName.name,this.baseFontRef);e.set("Font",t);return e}_createContext(){this.widths=new Map;this.ctxMeasure.font=`1000px ${this.fontFamily}`;return this.ctxMeasure}createFontResources(e){const t=this._createContext();for(const a of e.split(/\r\n?|\n/))for(const e of a.split("")){const a=e.charCodeAt(0);if(this.widths.has(a))continue;const r=t.measureText(e),i=Math.ceil(r.width);this.widths.set(a,i);this.firstChar=Math.min(a,this.firstChar);this.lastChar=Math.max(a,this.lastChar)}return this.resources}static getFirstPositionInfo(e,t,i){const[n,s,o,c]=e;let l=o-n,h=c-s;t%180!=0&&([l,h]=[h,l]);const u=a*i;return{coords:[0,h+r*i-u],bbox:[0,0,l,h],matrix:0!==t?getRotationMatrix(t,h,u):void 0}}createAppearance(e,t,i,n,s,o){const c=this._createContext(),l=[];let h=-1/0;for(const t of e.split(/\r\n?|\n/)){l.push(t);const e=c.measureText(t).width;h=Math.max(h,e);for(const e of codePointIter(t)){const t=String.fromCodePoint(e);let a=this.widths.get(e);if(void 0===a){const r=c.measureText(t);a=Math.ceil(r.width);this.widths.set(e,a);this.firstChar=Math.min(e,this.firstChar);this.lastChar=Math.max(e,this.lastChar)}}}h*=n/1e3;const[u,d,f,g]=t;let p=f-u,m=g-d;i%180!=0&&([p,m]=[m,p]);let b=1;h>p&&(b=p/h);let y=1;const w=a*n,S=r*n,x=w*l.length;x>m&&(y=m/x);const k=n*Math.min(b,y),C=["q",`0 0 ${numberToString(p)} ${numberToString(m)} re W n`,"BT",`1 0 0 1 0 ${numberToString(m+S)} Tm 0 Tc ${getPdfColor(s,!0)}`,`/${this.fontName.name} ${numberToString(k)} Tf`],{resources:v}=this;if(1!==(o="number"==typeof o&&o>=0&&o<=1?o:1)){C.push("/R0 gs");const e=new Dict(this.xref),t=new Dict(this.xref);t.set("ca",o);t.set("CA",o);t.setIfName("Type","ExtGState");e.set("R0",t);v.set("ExtGState",e)}const F=numberToString(w);for(const e of l)C.push(`0 -${F} Td <${stringToUTF16HexString(e)}> Tj`);C.push("ET","Q");const T=C.join("\n"),O=new Dict(this.xref);O.setIfName("Subtype","Form");O.setIfName("Type","XObject");O.set("BBox",[0,0,p,m]);O.set("Length",T.length);O.set("Resources",v);if(i){const e=getRotationMatrix(i,p,m);O.set("Matrix",e)}const D=new StringStream(T);D.dict=O;return D}}const Cn=["m/d","m/d/yy","mm/dd/yy","mm/yy","d-mmm","d-mmm-yy","dd-mmm-yy","yy-mm-dd","mmm-yy","mmmm-yy","mmm d, yyyy","mmmm d, yyyy","m/d/yy h:MM tt","m/d/yy HH:MM"],vn=["HH:MM","h:MM tt","HH:MM:ss","h:MM:ss tt"];class NameOrNumberTree{constructor(e,t,a){this.root=e;this.xref=t;this._type=a}getAll(e=!1){const t=new Map;if(!this.root)return t;const a=this.xref,r=new RefSet;r.put(this.root);const i=[this.root];for(;i.length>0;){const n=a.fetchIfRef(i.shift());if(!(n instanceof Dict))continue;if(n.has("Kids")){const e=n.get("Kids");if(!Array.isArray(e))continue;for(const t of e){if(r.has(t))throw new FormatError(`Duplicate entry in "${this._type}" tree.`);i.push(t);r.put(t)}continue}const s=n.get(this._type);if(Array.isArray(s))for(let r=0,i=s.length;r10){warn(`Search depth limit reached for "${this._type}" tree.`);return null}const i=a.get("Kids");if(!Array.isArray(i))return null;let n=0,s=i.length-1;for(;n<=s;){const r=n+s>>1,o=t.fetchIfRef(i[r]),c=o.get("Limits");if(et.fetchIfRef(c[1]))){a=o;break}n=r+1}}if(n>s)return null}const i=a.get(this._type);if(Array.isArray(i)){let a=0,r=i.length-2;for(;a<=r;){const n=a+r>>1,s=n+(1&n),o=t.fetchIfRef(i[s]);if(eo))return i[s+1];a=s+2}}}return null}get(e){return this.xref.fetchIfRef(this.getRaw(e))}}class NameTree extends NameOrNumberTree{constructor(e,t){super(e,t,"Names")}}class NumberTree extends NameOrNumberTree{constructor(e,t){super(e,t,"Nums")}}function clearGlobalCaches(){!function clearPatternCaches(){pi=Object.create(null)}();!function clearPrimitiveCaches(){oa=Object.create(null);ca=Object.create(null);la=Object.create(null)}();!function clearUnicodeCaches(){wr.clear()}();JpxImage.cleanup()}function pickPlatformItem(e){if(e instanceof Dict)for(const t of["UF","F","Unix","Mac","DOS"])if(e.has(t))return e.get(t);return null}class FileSpec{#me=!1;constructor(e,t=!1){if(e instanceof Dict){this.root=e;e.has("FS")&&(this.fs=e.get("FS"));e.has("RF")&&warn("Related file specifications are not supported");t||(e.has("EF")?this.#me=!0:warn("Non-embedded file specifications are not supported"))}}get filename(){const e=pickPlatformItem(this.root);return e&&"string"==typeof e?stringToPDFString(e,!0).replaceAll("\\\\","\\").replaceAll("\\/","/").replaceAll("\\","/"):""}get content(){if(!this.#me)return null;const e=pickPlatformItem(this.root?.get("EF"));if(e instanceof BaseStream)return e.getBytes();warn("Embedded file specification points to non-existing/invalid content");return null}get description(){const e=this.root?.get("Desc");return e&&"string"==typeof e?stringToPDFString(e):""}get serializable(){const{filename:e,content:t,description:a}=this;return{rawFilename:e,filename:(r=e,r.substring(r.lastIndexOf("/")+1))||"unnamed",content:t,description:a};var r}}const Fn=0,In=-2,Tn=-3,On=-4,Dn=-5,Mn=-6,Rn=-9;function isWhitespace(e,t){const a=e[t];return" "===a||"\n"===a||"\r"===a||"\t"===a}class XMLParserBase{_resolveEntities(e){return e.replaceAll(/&([^;]+);/g,(e,t)=>{if("#x"===t.substring(0,2))return String.fromCodePoint(parseInt(t.substring(2),16));if("#"===t.substring(0,1))return String.fromCodePoint(parseInt(t.substring(1),10));switch(t){case"lt":return"<";case"gt":return">";case"amp":return"&";case"quot":return'"';case"apos":return"'"}return this.onResolveEntity(t)})}_parseContent(e,t){const a=[];let r=t;function skipWs(){for(;r"!==e[r]&&"/"!==e[r];)++r;const i=e.substring(t,r);skipWs();for(;r"!==e[r]&&"/"!==e[r]&&"?"!==e[r];){skipWs();let t="",i="";for(;r"!==e[a]&&"?"!==e[a]&&"/"!==e[a];)++a;const r=e.substring(t,a);!function skipWs(){for(;a"!==e[a+1]);)++a;return{name:r,value:e.substring(i,a),parsed:a-t}}parseXml(e){let t=0;for(;t",a);if(t<0){this.onError(Rn);return}this.onEndElement(e.substring(a,t));a=t+1;break;case"?":++a;const r=this._parseProcessingInstruction(e,a);if("?>"!==e.substring(a+r.parsed,a+r.parsed+2)){this.onError(Tn);return}this.onPi(r.name,r.value);a+=r.parsed+2;break;case"!":if("--"===e.substring(a+1,a+3)){t=e.indexOf("--\x3e",a+3);if(t<0){this.onError(Dn);return}this.onComment(e.substring(a+3,t));a=t+3}else if("[CDATA["===e.substring(a+1,a+8)){t=e.indexOf("]]>",a+8);if(t<0){this.onError(In);return}this.onCdata(e.substring(a+8,t));a=t+3}else{if("DOCTYPE"!==e.substring(a+1,a+8)){this.onError(Mn);return}{const r=e.indexOf("[",a+8);let i=!1;t=e.indexOf(">",a+8);if(t<0){this.onError(On);return}if(r>0&&t>r){t=e.indexOf("]>",a+8);if(t<0){this.onError(On);return}i=!0}const n=e.substring(a+8,t+(i?1:0));this.onDoctype(n);a=t+(i?2:1)}}break;default:const i=this._parseContent(e,a);if(null===i){this.onError(Mn);return}let n=!1;if("/>"===e.substring(a+i.parsed,a+i.parsed+2))n=!0;else if(">"!==e.substring(a+i.parsed,a+i.parsed+1)){this.onError(Rn);return}this.onBeginElement(i.name,i.attributes,n);a+=i.parsed+(n?2:1)}}else{for(;ae.textContent).join(""):this.nodeValue||""}get children(){return this.childNodes||[]}hasChildNodes(){return this.childNodes?.length>0}searchNode(e,t){if(t>=e.length)return this;const a=e[t];if(a.name.startsWith("#")&&t0){r.push([i,0]);i=i.childNodes[0]}else{if(0===r.length)return null;for(;0!==r.length;){const[e,t]=r.pop(),a=t+1;if(a");for(const t of this.childNodes)t.dump(e);e.push(``)}else this.nodeValue?e.push(`>${encodeToXmlString(this.nodeValue)}`):e.push("/>")}else e.push(encodeToXmlString(this.nodeValue))}}class SimpleXMLParser extends XMLParserBase{constructor({hasAttributes:e=!1,lowerCaseName:t=!1}){super();this._currentFragment=null;this._stack=null;this._errorCode=Fn;this._hasAttributes=e;this._lowerCaseName=t}parseFromString(e){this._currentFragment=[];this._stack=[];this._errorCode=Fn;this.parseXml(e);if(this._errorCode!==Fn)return;const[t]=this._currentFragment;return t?{documentElement:t}:void 0}onText(e){if(function isWhitespaceString(e){for(let t=0,a=e.length;t\\376\\377([^<]+)/g,function(e,t){const a=t.replaceAll(/\\([0-3])([0-7])([0-7])/g,function(e,t,a,r){return String.fromCharCode(64*t+8*a+1*r)}).replaceAll(/&(amp|apos|gt|lt|quot);/g,function(e,t){switch(t){case"amp":return"&";case"apos":return"'";case"gt":return">";case"lt":return"<";case"quot":return'"'}throw new Error(`_repair: ${t} isn't defined.`)}),r=[">"];for(let e=0,t=a.length;e=32&&t<127&&60!==t&&62!==t&&38!==t?r.push(String.fromCharCode(t)):r.push("&#x"+(65536+t).toString(16).substring(1)+";")}return r.join("")})}_getSequence(e){const t=e.nodeName;return"rdf:bag"!==t&&"rdf:seq"!==t&&"rdf:alt"!==t?null:e.childNodes.filter(e=>"rdf:li"===e.nodeName)}_parseArray(e){if(!e.hasChildNodes())return;const[t]=e.childNodes,a=this._getSequence(t)||[];this._metadataMap.set(e.nodeName,a.map(e=>e.textContent.trim()))}_parse(e){let t=e.documentElement;if("rdf:rdf"!==t.nodeName){t=t.firstChild;for(;t&&"rdf:rdf"!==t.nodeName;)t=t.nextSibling}if(t&&"rdf:rdf"===t.nodeName&&t.hasChildNodes())for(const e of t.childNodes)if("rdf:description"===e.nodeName)for(const t of e.childNodes){const e=t.nodeName;switch(e){case"#text":continue;case"dc:creator":case"dc:subject":this._parseArray(t);continue}this._metadataMap.set(e,t.textContent.trim())}}get serializable(){return{parsedData:this._metadataMap,rawData:this._data}}}const Bn=1,Nn=2,Pn=3,En=4,Ln=5;class StructTreeRoot{constructor(e,t,a){this.xref=e;this.dict=t;this.ref=a instanceof Ref?a:null;this.roleMap=new Map;this.structParentIds=null;this.kidRefToPosition=void 0;this.parentTree=null}getKidPosition(e){if(void 0===this.kidRefToPosition){const e=this.dict.get("K");if(Array.isArray(e)){const t=this.kidRefToPosition=new Map;for(let a=0,r=e.length;a=0||(e.parentTreeId=a++);s=!1}}if(s){for(const e of t.values())for(const t of e){delete t.parentTreeId;delete t.structTreeParent}return!1}return!0}async updateStructureTree({newAnnotationsByPage:e,pdfManager:t,changes:a}){const{ref:r,xref:i}=this,n=this.dict.clone(),s=new RefSetCache;s.put(r,n);let o,c=n.getRaw("ParentTree");if(c instanceof Ref)o=i.fetch(c);else{o=c;c=i.getNewTemporaryRef();n.set("ParentTree",c)}o=o.clone();s.put(c,o);let l=o.getRaw("Nums"),h=null;if(l instanceof Ref){h=l;l=i.fetch(h)}l=l.slice();h||o.set("Nums",l);const u=await StructTreeRoot.#ye({newAnnotationsByPage:e,structTreeRootRef:r,structTreeRoot:this,kids:null,nums:l,xref:i,pdfManager:t,changes:a,cache:s});if(-1!==u){n.set("ParentTreeNextKey",u);h&&s.put(h,l);for(const[e,t]of s.items())a.put(e,{data:t})}}static async#ye({newAnnotationsByPage:e,structTreeRootRef:t,structTreeRoot:a,kids:r,nums:i,xref:n,pdfManager:s,changes:o,cache:c}){const l=Name.get("OBJR");let h,u=-1;for(const[d,f]of e){const e=await s.getPage(d),{ref:g}=e,p=g instanceof Ref;for(const{accessibilityData:s,ref:m,parentTreeId:b,structTreeParent:y}of f){if(!s?.type)continue;const{structParent:f}=s;if(a&&Number.isInteger(f)&&f>=0){let t=(h||=new Map).get(d);if(void 0===t){t=new StructTreePage(a,e.pageDict).collectObjects(g);h.set(d,t)}const r=t?.get(f);if(r){const e=n.fetch(r).clone();StructTreeRoot.#Se(e,s);o.put(r,{data:e});continue}}u=Math.max(u,b);const w=n.getNewTemporaryRef(),S=new Dict(n);StructTreeRoot.#Se(S,s);await this.#xe({structTreeParent:y,tagDict:S,newTagRef:w,structTreeRootRef:t,fallbackKids:r,xref:n,cache:c});const x=new Dict(n);S.set("K",x);x.set("Type",l);p&&x.set("Pg",g);x.set("Obj",m);c.put(w,S);i.push(b,w)}}return u+1}static#Se(e,{type:t,title:a,lang:r,alt:i,expanded:n,actualText:s}){e.set("S",Name.get(t));a&&e.set("T",stringToAsciiOrUTF16BE(a));r&&e.set("Lang",stringToAsciiOrUTF16BE(r));i&&e.set("Alt",stringToAsciiOrUTF16BE(i));n&&e.set("E",stringToAsciiOrUTF16BE(n));s&&e.set("ActualText",stringToAsciiOrUTF16BE(s))}static#we({elements:e,xref:t,pageDict:a,numberTree:r}){const i=new Map;for(const t of e)if(t.structTreeParentId){const e=parseInt(t.structTreeParentId.split("_mc")[1],10);let a=i.get(e);if(!a){a=[];i.set(e,a)}a.push(t)}const n=a.get("StructParents");if(!Number.isInteger(n))return;const s=r.get(n),updateElement=(e,a,r)=>{const n=i.get(e);if(n){const e=a.getRaw("P"),i=t.fetchIfRef(e);if(e instanceof Ref&&i instanceof Dict){const e={ref:r,dict:a};for(const t of n)t.structTreeParent=e}return!0}return!1};for(const e of s){if(!(e instanceof Ref))continue;const a=t.fetch(e),r=a.get("K");if(Number.isInteger(r))updateElement(r,a,e);else if(Array.isArray(r))for(let i of r){i=t.fetchIfRef(i);if(Number.isInteger(i)&&updateElement(i,a,e))break;if(!(i instanceof Dict))continue;if(!isName(i.get("Type"),"MCR"))break;const r=i.get("MCID");if(Number.isInteger(r)&&updateElement(r,a,e))break}}}static async#xe({structTreeParent:e,tagDict:t,newTagRef:a,structTreeRootRef:r,fallbackKids:i,xref:n,cache:s}){let o,c=null;if(e){({ref:c}=e);o=e.dict.getRaw("P")||r}else o=r;t.set("P",o);const l=n.fetchIfRef(o);if(!l){i.push(a);return}let h=s.get(o);if(!h){h=l.clone();s.put(o,h)}const u=h.getRaw("K");let d=u instanceof Ref?s.get(u):null;if(!d){d=n.fetchIfRef(u);d=Array.isArray(d)?d.slice():[u];const e=n.getNewTemporaryRef();h.set("K",e);s.put(e,d)}const f=d.indexOf(c);d.splice(f>=0?f+1:d.length,0,a)}}class StructElementNode{constructor(e,t){this.tree=e;this.xref=e.xref;this.dict=t;this.kids=[];this.parseKids()}get role(){const e=this.dict.get("S"),t=e instanceof Name?e.name:"",{root:a}=this.tree;return a.roleMap.get(t)??t}get mathML(){let e=this.dict.get("AF")||[];Array.isArray(e)||(e=[e]);for(let t of e){t=this.xref.fetchIfRef(t);if(!(t instanceof Dict))continue;if(!isName(t.get("Type"),"Filespec"))continue;if(!isName(t.get("AFRelationship"),"Supplement"))continue;const e=t.get("EF");if(!(e instanceof Dict))continue;const a=e.get("UF")||e.get("F");if(a instanceof BaseStream&&(isName(a.dict.get("Type"),"EmbeddedFile")&&isName(a.dict.get("Subtype"),"application/mathml+xml")))return stringToUTF8String(a.getString())}const t=this.dict.get("A");if(t instanceof Dict){if(isName(t.get("O"),"MSFT_Office")){const e=t.get("MSFT_MathML");return e?stringToPDFString(e):null}}return null}parseKids(){let e=null;const t=this.dict.getRaw("Pg");t instanceof Ref&&(e=t.toString());const a=this.dict.get("K");if(Array.isArray(a))for(const t of a){const a=this.parseKid(e,this.xref.fetchIfRef(t));a&&this.kids.push(a)}else{const t=this.parseKid(e,a);t&&this.kids.push(t)}}parseKid(e,t){if(Number.isInteger(t))return this.tree.pageDict.objId!==e?null:new StructElement({type:Bn,mcid:t,pageObjId:e});if(!(t instanceof Dict))return null;const a=t.getRaw("Pg");a instanceof Ref&&(e=a.toString());const r=t.get("Type")instanceof Name?t.get("Type").name:null;if("MCR"===r){if(this.tree.pageDict.objId!==e)return null;const a=t.getRaw("Stm");return new StructElement({type:Nn,refObjId:a instanceof Ref?a.toString():null,pageObjId:e,mcid:t.get("MCID")})}if("OBJR"===r){if(this.tree.pageDict.objId!==e)return null;const a=t.getRaw("Obj");return new StructElement({type:Pn,refObjId:a instanceof Ref?a.toString():null,pageObjId:e})}return new StructElement({type:Ln,dict:t})}}class StructElement{constructor({type:e,dict:t=null,mcid:a=null,pageObjId:r=null,refObjId:i=null}){this.type=e;this.dict=t;this.mcid=a;this.pageObjId=r;this.refObjId=i;this.parentNode=null}}class StructTreePage{constructor(e,t){this.root=e;this.xref=e?.xref??null;this.rootDict=e?.dict??null;this.pageDict=t;this.nodes=[]}collectObjects(e){if(!(this.root&&this.rootDict&&e instanceof Ref))return null;const t=this.rootDict.get("ParentTree");if(!t)return null;const a=this.root.structParentIds?.get(e);if(!a)return null;const r=new Map,i=new NumberTree(t,this.xref);for(const[e]of a){const t=i.getRaw(e);t instanceof Ref&&r.set(e,t)}return r}parse(e){if(!(this.root&&this.rootDict&&e instanceof Ref))return;const{parentTree:t}=this.root;if(!t)return;const a=this.pageDict.get("StructParents"),r=this.root.structParentIds?.get(e);if(!Number.isInteger(a)&&!r)return;const i=new Map;if(Number.isInteger(a)){const e=t.get(a);if(Array.isArray(e))for(const t of e)t instanceof Ref&&this.addNode(this.xref.fetch(t),i)}if(r)for(const[e,a]of r){const r=t.get(e);if(r){const e=this.addNode(this.xref.fetchIfRef(r),i);1===e?.kids?.length&&e.kids[0].type===Pn&&(e.kids[0].type=a)}}}addNode(e,t,a=0){if(a>40){warn("StructTree MAX_DEPTH reached.");return null}if(!(e instanceof Dict))return null;if(t.has(e))return t.get(e);const r=new StructElementNode(this,e);t.set(e,r);switch(r.role){case"L":case"LBody":case"LI":case"Table":case"THead":case"TBody":case"TFoot":case"TR":for(const e of r.kids)e.type===Ln&&this.addNode(e.dict,t,a-1)}const i=e.get("P");if(!(i instanceof Dict)||isName(i.get("Type"),"StructTreeRoot")){this.addTopLevelNode(e,r)||t.delete(e);return r}const n=this.addNode(i,t,a+1);if(!n)return r;let s=!1;for(const t of n.kids)if(t.type===Ln&&t.dict===e){t.parentNode=r;s=!0}s||t.delete(e);return r}addTopLevelNode(e,t){const a=this.root.getKidPosition(e.objId);if(isNaN(a))return!1;-1!==a&&(this.nodes[a]=t);return!0}get serializable(){function nodeToSerializable(e,t,a=0){if(a>40){warn("StructTree too deep to be fully serialized.");return}const r=Object.create(null);r.role=e.role;r.children=[];t.children.push(r);let i=e.dict.get("Alt");"string"!=typeof i&&(i=e.dict.get("ActualText"));"string"==typeof i&&(r.alt=stringToPDFString(i));if("Formula"===r.role){const{mathML:t}=e;t&&(r.mathML=t)}const n=e.dict.get("A");if(n instanceof Dict){const e=lookupNormalRect(n.getArray("BBox"),null);if(e)r.bbox=e;else{const e=n.get("Width"),t=n.get("Height");"number"==typeof e&&e>0&&"number"==typeof t&&t>0&&(r.bbox=[0,0,e,t])}}const s=e.dict.get("Lang");"string"==typeof s&&(r.lang=stringToPDFString(s));for(const t of e.kids){const e=t.type===Ln?t.parentNode:null;e?nodeToSerializable(e,r,a+1):t.type===Bn||t.type===Nn?r.children.push({type:"content",id:`p${t.pageObjId}_mc${t.mcid}`}):t.type===Pn?r.children.push({type:"object",id:t.refObjId}):t.type===En&&r.children.push({type:"annotation",id:`pdfjs_internal_id_${t.refObjId}`})}}const e=Object.create(null);e.children=[];e.role="Root";for(const t of this.nodes)t&&nodeToSerializable(t,e);return e}}const _n=function _isValidExplicitDest(e,t,a){if(!Array.isArray(a)||a.length<2)return!1;const[r,i,...n]=a;if(!e(r)&&!Number.isInteger(r))return!1;if(!t(i))return!1;const s=n.length;let o=!0;switch(i.name){case"XYZ":if(s<2||s>3)return!1;break;case"Fit":case"FitB":return 0===s;case"FitH":case"FitBH":case"FitV":case"FitBV":if(s>1)return!1;break;case"FitR":if(4!==s)return!1;o=!1;break;default:return!1}for(const e of n)if(!("number"==typeof e||o&&null===e))return!1;return!0}.bind(null,e=>e instanceof Ref,isName);function fetchDest(e){e instanceof Dict&&(e=e.get("D"));return _n(e)?e:null}function fetchRemoteDest(e){let t=e.get("D");if(t){t instanceof Name&&(t=t.name);if("string"==typeof t)return stringToPDFString(t,!0);if(_n(t))return JSON.stringify(t)}return null}class Catalog{#Ae=null;#ke=null;builtInCMapCache=new Map;fontCache=new RefSetCache;globalColorSpaceCache=new GlobalColorSpaceCache;globalImageCache=new GlobalImageCache;nonBlendModesSet=new RefSet;pageDictCache=new RefSetCache;pageIndexCache=new RefSetCache;pageKidsCountCache=new RefSetCache;standardFontDataCache=new Map;systemFontCache=new Map;constructor(e,t){this.pdfManager=e;this.xref=t;this.#ke=t.getCatalogObj();if(!(this.#ke instanceof Dict))throw new FormatError("Catalog object is not a dictionary.");this.toplevelPagesDict}cloneDict(){return this.#ke.clone()}get version(){const e=this.#ke.get("Version");if(e instanceof Name){if(ua.test(e.name))return shadow(this,"version",e.name);warn(`Invalid PDF catalog version: ${e.name}`)}return shadow(this,"version",null)}get lang(){const e=this.#ke.get("Lang");return shadow(this,"lang",e&&"string"==typeof e?stringToPDFString(e):null)}get needsRendering(){const e=this.#ke.get("NeedsRendering");return shadow(this,"needsRendering","boolean"==typeof e&&e)}get collection(){let e=null;try{const t=this.#ke.get("Collection");t instanceof Dict&&t.size>0&&(e=t)}catch(e){if(e instanceof MissingDataException)throw e;info("Cannot fetch Collection entry; assuming no collection is present.")}return shadow(this,"collection",e)}get acroForm(){let e=null;try{const t=this.#ke.get("AcroForm");t instanceof Dict&&t.size>0&&(e=t)}catch(e){if(e instanceof MissingDataException)throw e;info("Cannot fetch AcroForm entry; assuming no forms are present.")}return shadow(this,"acroForm",e)}get acroFormRef(){const e=this.#ke.getRaw("AcroForm");return shadow(this,"acroFormRef",e instanceof Ref?e:null)}get metadata(){const e=this.#ke.getRaw("Metadata");if(!(e instanceof Ref))return shadow(this,"metadata",null);let t=null;try{const a=this.xref.fetch(e,!this.xref.encrypt?.encryptMetadata);if(a instanceof BaseStream&&a.dict instanceof Dict){const e=a.dict.get("Type"),r=a.dict.get("Subtype");if(isName(e,"Metadata")&&isName(r,"XML")){const e=stringToUTF8String(a.getString());e&&(t=new MetadataParser(e).serializable)}}}catch(e){if(e instanceof MissingDataException)throw e;info(`Skipping invalid Metadata: "${e}".`)}return shadow(this,"metadata",t)}get markInfo(){let e=null;try{e=this.#Ce()}catch(e){if(e instanceof MissingDataException)throw e;warn("Unable to read mark info.")}return shadow(this,"markInfo",e)}#Ce(){const e=this.#ke.get("MarkInfo");if(!(e instanceof Dict))return null;const t={Marked:!1,UserProperties:!1,Suspects:!1};for(const a in t){const r=e.get(a);"boolean"==typeof r&&(t[a]=r)}return t}get hasStructTree(){return this.#ke.has("StructTreeRoot")}get structTreeRoot(){let e=null;try{e=this.#ve()}catch(e){if(e instanceof MissingDataException)throw e;warn("Unable read to structTreeRoot info.")}return shadow(this,"structTreeRoot",e)}#ve(){const e=this.#ke.getRaw("StructTreeRoot"),t=this.xref.fetchIfRef(e);if(!(t instanceof Dict))return null;const a=new StructTreeRoot(this.xref,t,e);a.init();return a}get toplevelPagesDict(){const e=this.#ke.get("Pages");if(!(e instanceof Dict))throw new FormatError("Invalid top-level pages dictionary.");return shadow(this,"toplevelPagesDict",e)}get documentOutline(){let e=null;try{e=this.#Fe()}catch(e){if(e instanceof MissingDataException)throw e;warn("Unable to read document outline.")}return shadow(this,"documentOutline",e)}#Fe(){let e=this.#ke.get("Outlines");if(!(e instanceof Dict))return null;e=e.getRaw("First");if(!(e instanceof Ref))return null;const t={items:[]},a=[{obj:e,parent:t}],r=new RefSet;r.put(e);const i=this.xref,n=new Uint8ClampedArray(3);for(;a.length>0;){const t=a.shift(),s=i.fetchIfRef(t.obj);if(null===s)continue;s.has("Title")||warn("Invalid outline item encountered.");const o={url:null,dest:null,action:null};Catalog.parseDestDictionary({destDict:s,resultObj:o,docBaseUrl:this.baseUrl,docAttachments:this.attachments});const c=s.get("Title"),l=s.get("F")||0,h=s.getArray("C"),u=s.get("Count");let d=n;!isNumberArray(h,3)||0===h[0]&&0===h[1]&&0===h[2]||(d=ColorSpaceUtils.rgb.getRgb(h,0));const f={action:o.action,attachment:o.attachment,dest:o.dest,url:o.url,unsafeUrl:o.unsafeUrl,newWindow:o.newWindow,setOCGState:o.setOCGState,title:"string"==typeof c?stringToPDFString(c):"",color:d,count:Number.isInteger(u)?u:void 0,bold:!!(2&l),italic:!!(1&l),items:[]};t.parent.items.push(f);e=s.getRaw("First");if(e instanceof Ref&&!r.has(e)){a.push({obj:e,parent:f});r.put(e)}e=s.getRaw("Next");if(e instanceof Ref&&!r.has(e)){a.push({obj:e,parent:t.parent});r.put(e)}}return t.items.length>0?t.items:null}get permissions(){let e=null;try{e=this.#Ie()}catch(e){if(e instanceof MissingDataException)throw e;warn("Unable to read permissions.")}return shadow(this,"permissions",e)}#Ie(){const e=this.xref.trailer.get("Encrypt");if(!(e instanceof Dict))return null;let t=e.get("P");if("number"!=typeof t)return null;t+=2**32;const a=[];for(const e in w){const r=w[e];t&r&&a.push(r)}return a}get optionalContentConfig(){let e=null;try{const t=this.#ke.get("OCProperties");if(!t)return shadow(this,"optionalContentConfig",null);const a=t.get("D");if(!a)return shadow(this,"optionalContentConfig",null);const r=t.get("OCGs");if(!Array.isArray(r))return shadow(this,"optionalContentConfig",null);const i=new RefSetCache;for(const e of r)e instanceof Ref&&!i.has(e)&&i.put(e,this.#Te(e));e=this.#Oe(a,i)}catch(e){if(e instanceof MissingDataException)throw e;warn(`Unable to read optional content config: ${e}`)}return shadow(this,"optionalContentConfig",e)}#Te(e){const t=this.xref.fetch(e),a={id:e.toString(),name:null,intent:null,usage:{print:null,view:null},rbGroups:[]},r=t.get("Name");"string"==typeof r&&(a.name=stringToPDFString(r));let i=t.getArray("Intent");Array.isArray(i)||(i=[i]);i.every(e=>e instanceof Name)&&(a.intent=i.map(e=>e.name));const n=t.get("Usage");if(!(n instanceof Dict))return a;const s=a.usage,o=n.get("Print");if(o instanceof Dict){const e=o.get("PrintState");if(e instanceof Name)switch(e.name){case"ON":case"OFF":s.print={printState:e.name}}}const c=n.get("View");if(c instanceof Dict){const e=c.get("ViewState");if(e instanceof Name)switch(e.name){case"ON":case"OFF":s.view={viewState:e.name}}}return a}#Oe(e,t){function parseOnOff(e){const a=[];if(Array.isArray(e))for(const r of e)r instanceof Ref&&t.has(r)&&a.push(r.toString());return a}function parseOrder(e,a=0){if(!Array.isArray(e))return null;const i=[];for(const n of e){if(n instanceof Ref&&t.has(n)){r.put(n);i.push(n.toString());continue}const e=parseNestedOrder(n,a);e&&i.push(e)}if(a>0)return i;const n=[];for(const[e]of t.items())r.has(e)||n.push(e.toString());n.length&&i.push({name:null,order:n});return i}function parseNestedOrder(e,t){if(++t>i){warn("parseNestedOrder - reached MAX_NESTED_LEVELS.");return null}const r=a.fetchIfRef(e);if(!Array.isArray(r))return null;const n=a.fetchIfRef(r[0]);if("string"!=typeof n)return null;const s=parseOrder(r.slice(1),t);return s?.length?{name:stringToPDFString(n),order:s}:null}const a=this.xref,r=new RefSet,i=10;!function parseRBGroups(e){if(Array.isArray(e))for(const r of e){const e=a.fetchIfRef(r);if(!Array.isArray(e)||!e.length)continue;const i=new Set;for(const a of e)if(a instanceof Ref&&t.has(a)&&!i.has(a.toString())){i.add(a.toString());t.get(a).rbGroups.push(i)}}}(e.get("RBGroups"));return{name:"string"==typeof e.get("Name")?stringToPDFString(e.get("Name")):null,creator:"string"==typeof e.get("Creator")?stringToPDFString(e.get("Creator")):null,baseState:e.get("BaseState")instanceof Name?e.get("BaseState").name:null,on:parseOnOff(e.get("ON")),off:parseOnOff(e.get("OFF")),order:parseOrder(e.get("Order")),groups:[...t]}}setActualNumPages(e=null){this.#Ae=e}get hasActualNumPages(){return null!==this.#Ae}get _pagesCount(){const e=this.toplevelPagesDict.get("Count");if(!Number.isInteger(e))throw new FormatError("Page count in top-level pages dictionary is not an integer.");return shadow(this,"_pagesCount",e)}get numPages(){return this.#Ae??this._pagesCount}get destinations(){const e=this.#De(),t=Object.create(null);for(const a of e)if(a instanceof NameTree)for(const[e,r]of a.getAll()){const a=fetchDest(r);a&&(t[stringToPDFString(e,!0)]=a)}else if(a instanceof Dict)for(const[e,r]of a){const a=fetchDest(r);a&&(t[stringToPDFString(e,!0)]||=a)}return shadow(this,"destinations",t)}getDestination(e){if(this.hasOwnProperty("destinations"))return this.destinations[e]??null;const t=this.#De();for(const a of t)if(a instanceof NameTree||a instanceof Dict){const t=fetchDest(a.get(e));if(t)return t}if(t.length){const t=this.destinations[e];if(t)return t}return null}#De(){const e=this.#ke.get("Names"),t=[];e?.has("Dests")&&t.push(new NameTree(e.getRaw("Dests"),this.xref));this.#ke.has("Dests")&&t.push(this.#ke.get("Dests"));return t}get rawPageLabels(){const e=this.#ke.getRaw("PageLabels");if(!e)return null;return new NumberTree(e,this.xref).getAll()}get pageLabels(){let e=null;try{e=this.#Me()}catch(e){if(e instanceof MissingDataException)throw e;warn("Unable to read page labels.")}return shadow(this,"pageLabels",e)}#Me(){const e=this.rawPageLabels;if(!e)return null;const t=new Array(this.numPages);let a=null,r="",i="",n=1;for(let s=0,o=this.numPages;s=1))throw new FormatError("Invalid start in PageLabel dictionary.");n=e}else n=1}switch(a){case"D":i=n;break;case"R":case"r":i=toRomanNumerals(n,"r"===a);break;case"A":case"a":const e=26,t="a"===a?97:65,r=n-1;i=String.fromCharCode(t+r%e).repeat(Math.floor(r/e)+1);break;default:if(a)throw new FormatError(`Invalid style "${a}" in PageLabel dictionary.`);i=""}t[s]=r+i;n++}return t}get pageLayout(){const e=this.#ke.get("PageLayout");let t="";if(e instanceof Name)switch(e.name){case"SinglePage":case"OneColumn":case"TwoColumnLeft":case"TwoColumnRight":case"TwoPageLeft":case"TwoPageRight":t=e.name}return shadow(this,"pageLayout",t)}get pageMode(){const e=this.#ke.get("PageMode");let t="UseNone";if(e instanceof Name)switch(e.name){case"UseNone":case"UseOutlines":case"UseThumbs":case"FullScreen":case"UseOC":case"UseAttachments":t=e.name}return shadow(this,"pageMode",t)}get viewerPreferences(){const e=this.#ke.get("ViewerPreferences");if(!(e instanceof Dict))return shadow(this,"viewerPreferences",null);let t=null;for(const[a,r]of e){let e;switch(a){case"HideToolbar":case"HideMenubar":case"HideWindowUI":case"FitWindow":case"CenterWindow":case"DisplayDocTitle":case"PickTrayByPDFSize":"boolean"==typeof r&&(e=r);break;case"NonFullScreenPageMode":if(r instanceof Name)switch(r.name){case"UseNone":case"UseOutlines":case"UseThumbs":case"UseOC":e=r.name;break;default:e="UseNone"}break;case"Direction":if(r instanceof Name)switch(r.name){case"L2R":case"R2L":e=r.name;break;default:e="L2R"}break;case"ViewArea":case"ViewClip":case"PrintArea":case"PrintClip":if(r instanceof Name)switch(r.name){case"MediaBox":case"CropBox":case"BleedBox":case"TrimBox":case"ArtBox":e=r.name;break;default:e="CropBox"}break;case"PrintScaling":if(r instanceof Name)switch(r.name){case"None":case"AppDefault":e=r.name;break;default:e="AppDefault"}break;case"Duplex":if(r instanceof Name)switch(r.name){case"Simplex":case"DuplexFlipShortEdge":case"DuplexFlipLongEdge":e=r.name;break;default:e="None"}break;case"PrintPageRange":if(Array.isArray(r)&&r.length%2==0){r.every((e,t,a)=>Number.isInteger(e)&&e>0&&(0===t||e>=a[t-1])&&e<=this.numPages)&&(e=r)}break;case"NumCopies":Number.isInteger(r)&&r>0&&(e=r);break;default:warn(`Ignoring non-standard key in ViewerPreferences: ${a}.`);continue}if(void 0!==e){t??=Object.create(null);t[a]=e}else warn(`Bad value, for key "${a}", in ViewerPreferences: ${r}.`)}return shadow(this,"viewerPreferences",t)}get openAction(){const e=this.#ke.get("OpenAction"),t=Object.create(null);if(e instanceof Dict){const a=new Dict(this.xref);a.set("A",e);const r={url:null,dest:null,action:null};Catalog.parseDestDictionary({destDict:a,resultObj:r});Array.isArray(r.dest)?t.dest=r.dest:r.action&&(t.action=r.action)}else _n(e)&&(t.dest=e);return shadow(this,"openAction",objectSize(t)>0?t:null)}get attachments(){const e=this.#ke.get("Names");let t=null;if(e instanceof Dict&&e.has("EmbeddedFiles")){const a=new NameTree(e.getRaw("EmbeddedFiles"),this.xref);for(const[e,r]of a.getAll()){const a=new FileSpec(r);t??=Object.create(null);t[stringToPDFString(e,!0)]=a.serializable}}return shadow(this,"attachments",t)}get xfaImages(){const e=this.#ke.get("Names");let t=null;if(e instanceof Dict&&e.has("XFAImages")){const a=new NameTree(e.getRaw("XFAImages"),this.xref);for(const[e,r]of a.getAll())if(r instanceof BaseStream){t??=new Map;t.set(stringToPDFString(e,!0),r.getBytes())}}return shadow(this,"xfaImages",t)}#Re(){const e=this.#ke.get("Names");let t=null;function appendIfJavaScriptDict(e,a){if(!(a instanceof Dict))return;if(!isName(a.get("S"),"JavaScript"))return;let r=a.get("JS");if(r instanceof BaseStream)r=r.getString();else if("string"!=typeof r)return;r=stringToPDFString(r,!0).replaceAll("\0","");r&&(t||=new Map).set(e,r)}if(e instanceof Dict&&e.has("JavaScript")){const t=new NameTree(e.getRaw("JavaScript"),this.xref);for(const[e,a]of t.getAll())appendIfJavaScriptDict(stringToPDFString(e,!0),a)}const a=this.#ke.get("OpenAction");a&&appendIfJavaScriptDict("OpenAction",a);return t}get jsActions(){const e=this.#Re();let t=collectActions(this.xref,this.#ke,ne);if(e){t||=Object.create(null);for(const[a,r]of e)a in t?t[a].push(r):t[a]=[r]}return shadow(this,"jsActions",t)}async cleanup(e=!1){clearGlobalCaches();this.globalColorSpaceCache.clear();this.globalImageCache.clear(e);this.pageKidsCountCache.clear();this.pageIndexCache.clear();this.pageDictCache.clear();this.nonBlendModesSet.clear();for(const{dict:e}of await Promise.all(this.fontCache))delete e.cacheKey;this.fontCache.clear();this.builtInCMapCache.clear();this.standardFontDataCache.clear();this.systemFontCache.clear()}async getPageDict(e){const t=[this.toplevelPagesDict],a=new RefSet,r=this.#ke.getRaw("Pages");r instanceof Ref&&a.put(r);const i=this.xref,n=this.pageKidsCountCache,s=this.pageIndexCache,o=this.pageDictCache;let c=0;for(;t.length;){const r=t.pop();if(r instanceof Ref){const l=n.get(r);if(l>=0&&c+l<=e){c+=l;continue}if(a.has(r))throw new FormatError("Pages tree contains circular reference.");a.put(r);const h=await(o.get(r)||i.fetchAsync(r));if(h instanceof Dict){let t=h.getRaw("Type");t instanceof Ref&&(t=await i.fetchAsync(t));if(isName(t,"Page")||!h.has("Kids")){n.has(r)||n.put(r,1);s.has(r)||s.put(r,c);if(c===e)return[h,r];c++;continue}}t.push(h);continue}if(!(r instanceof Dict))throw new FormatError("Page dictionary kid reference points to wrong type of object.");const{objId:l}=r;let h=r.getRaw("Count");h instanceof Ref&&(h=await i.fetchAsync(h));if(Number.isInteger(h)&&h>=0){l&&!n.has(l)&&n.put(l,h);if(c+h<=e){c+=h;continue}}let u=r.getRaw("Kids");u instanceof Ref&&(u=await i.fetchAsync(u));if(!Array.isArray(u)){let t=r.getRaw("Type");t instanceof Ref&&(t=await i.fetchAsync(t));if(isName(t,"Page")||!r.has("Kids")){if(c===e)return[r,null];c++;continue}throw new FormatError("Page dictionary kids object is not an array.")}for(let e=u.length-1;e>=0;e--){const a=u[e];t.push(a);r===this.toplevelPagesDict&&a instanceof Ref&&!o.has(a)&&o.put(a,i.fetchAsync(a))}}throw new Error(`Page index ${e} not found.`)}async getAllPageDicts(e=!1){const{ignoreErrors:t}=this.pdfManager.evaluatorOptions,a=[{currentNode:this.toplevelPagesDict,posInKids:0}],r=new RefSet,i=this.#ke.getRaw("Pages");i instanceof Ref&&r.put(i);const n=new Map,s=this.xref,o=this.pageIndexCache;let c=0;function addPageDict(e,t){t&&!o.has(t)&&o.put(t,c);n.set(c++,[e,t])}function addPageError(a){if(a instanceof XRefEntryException&&!e)throw a;if(e&&t&&0===c){warn(`getAllPageDicts - Skipping invalid first page: "${a}".`);a=Dict.empty}n.set(c++,[a,null])}for(;a.length>0;){const e=a.at(-1),{currentNode:t,posInKids:i}=e;let n=t.getRaw("Kids");if(n instanceof Ref)try{n=await s.fetchAsync(n)}catch(e){addPageError(e);break}if(!Array.isArray(n)){addPageError(new FormatError("Page dictionary kids object is not an array."));break}if(i>=n.length){a.pop();continue}const o=n[i];let c;if(o instanceof Ref){if(r.has(o)){addPageError(new FormatError("Pages tree contains circular reference."));break}r.put(o);try{c=await s.fetchAsync(o)}catch(e){addPageError(e);break}}else c=o;if(!(c instanceof Dict)){addPageError(new FormatError("Page dictionary kid reference points to wrong type of object."));break}let l=c.getRaw("Type");if(l instanceof Ref)try{l=await s.fetchAsync(l)}catch(e){addPageError(e);break}isName(l,"Page")||!c.has("Kids")?addPageDict(c,o instanceof Ref?o:null):a.push({currentNode:c,posInKids:0});e.posInKids++}return n}getPageIndex(e){const t=this.pageIndexCache.get(e);if(void 0!==t)return Promise.resolve(t);const a=this.xref;let r=0;const next=t=>function pagesBeforeRef(t){let r,i=0;return a.fetchAsync(t).then(function(a){if(isRefsEqual(t,e)&&!isDict(a,"Page")&&!(a instanceof Dict&&!a.has("Type")&&a.has("Contents")))throw new FormatError("The reference does not point to a /Page dictionary.");if(!a)return null;if(!(a instanceof Dict))throw new FormatError("Node must be a dictionary.");r=a.getRaw("Parent");return a.getAsync("Parent")}).then(function(e){if(!e)return null;if(!(e instanceof Dict))throw new FormatError("Parent must be a dictionary.");return e.getAsync("Kids")}).then(function(e){if(!e)return null;const n=[];let s=!1;for(const r of e){if(!(r instanceof Ref))throw new FormatError("Kid must be a reference.");if(isRefsEqual(r,t)){s=!0;break}n.push(a.fetchAsync(r).then(function(e){if(!(e instanceof Dict))throw new FormatError("Kid node must be a dictionary.");e.has("Count")?i+=e.get("Count"):i++}))}if(!s)throw new FormatError("Kid reference not found in parent's kids.");return Promise.all(n).then(()=>[i,r])})}(t).then(t=>{if(!t){this.pageIndexCache.put(e,r);return r}const[a,i]=t;r+=a;return next(i)});return next(e)}get baseUrl(){const e=this.#ke.get("URI");if(e instanceof Dict){const t=e.get("Base");if("string"==typeof t){const e=createValidAbsoluteUrl(t,null,{tryConvertEncoding:!0});if(e)return shadow(this,"baseUrl",e.href)}}return shadow(this,"baseUrl",this.pdfManager.docBaseUrl)}static parseDestDictionary({destDict:e,resultObj:t,docBaseUrl:a=null,docAttachments:r=null}){if(!(e instanceof Dict)){warn("parseDestDictionary: `destDict` must be a dictionary.");return}let i,n,s=e.get("A");if(!(s instanceof Dict))if(e.has("Dest"))s=e.get("Dest");else{s=e.get("AA");s instanceof Dict&&(s.has("D")?s=s.get("D"):s.has("U")&&(s=s.get("U")))}if(s instanceof Dict){const e=s.get("S");if(!(e instanceof Name)){warn("parseDestDictionary: Invalid type in Action dictionary.");return}const a=e.name;switch(a){case"ResetForm":const e=s.get("Flags"),o=!(1&("number"==typeof e?e:0)),c=[],l=[];for(const e of s.get("Fields")||[])e instanceof Ref?l.push(e.toString()):"string"==typeof e&&c.push(stringToPDFString(e));t.resetForm={fields:c,refs:l,include:o};break;case"URI":i=s.get("URI");i instanceof Name&&(i="/"+i.name);break;case"GoTo":n=s.get("D");break;case"Launch":case"GoToR":const h=s.get("F");if(h instanceof Dict){const e=new FileSpec(h,!0);({rawFilename:i}=e.serializable)}else{if("string"!=typeof h)break;i=h}const u=fetchRemoteDest(s);u&&(i=i.split("#",1)[0]+"#"+u);const d=s.get("NewWindow");"boolean"==typeof d&&(t.newWindow=d);break;case"GoToE":const f=s.get("T");let g;if(r&&f instanceof Dict){const e=f.get("R"),t=f.get("N");isName(e,"C")&&"string"==typeof t&&(g=r[stringToPDFString(t,!0)])}if(g){t.attachment=g;const e=fetchRemoteDest(s);e&&(t.attachmentDest=e)}else warn('parseDestDictionary - unimplemented "GoToE" action.');break;case"Named":const p=s.get("N");p instanceof Name&&(t.action=p.name);break;case"SetOCGState":const m=s.get("State"),b=s.get("PreserveRB");if(!Array.isArray(m)||0===m.length)break;const y=[];for(const e of m)if(e instanceof Name)switch(e.name){case"ON":case"OFF":case"Toggle":y.push(e.name)}else e instanceof Ref&&y.push(e.toString());if(y.length!==m.length)break;t.setOCGState={state:y,preserveRB:"boolean"!=typeof b||b};break;case"JavaScript":const w=s.get("JS");let S;w instanceof BaseStream?S=w.getString():"string"==typeof w&&(S=w);const x=S&&recoverJsURL(stringToPDFString(S,!0));if(x){i=x.url;t.newWindow=x.newWindow;break}default:if("JavaScript"===a||"SubmitForm"===a)break;warn(`parseDestDictionary - unsupported action: "${a}".`)}}else e.has("Dest")&&(n=e.get("Dest"));if("string"==typeof i){const e=createValidAbsoluteUrl(i,a,{addDefaultProtocol:!0,tryConvertEncoding:!0});e&&(t.url=e.href);t.unsafeUrl=i}if(n){n instanceof Name&&(n=n.name);"string"==typeof n?t.dest=stringToPDFString(n,!0):_n(n)&&(t.dest=n)}}}function mayHaveChildren(e){return e instanceof Ref||e instanceof Dict||e instanceof BaseStream||Array.isArray(e)}function addChildren(e,t){if(e instanceof Dict)e=e.getRawValues();else if(e instanceof BaseStream)e=e.dict.getRawValues();else if(!Array.isArray(e))return;for(const a of e)mayHaveChildren(a)&&t.push(a)}class ObjectLoader{refSet=new RefSet;constructor(e,t,a){this.dict=e;this.keys=t;this.xref=a}async load(){const{keys:e,dict:t}=this,a=[];for(const r of e){const e=t.getRaw(r);void 0!==e&&a.push(e)}await this.#Be(a);this.refSet=null}async#Be(e){const t=[],a=[];for(;e.length;){let r=e.pop();if(r instanceof Ref){if(this.refSet.has(r))continue;try{this.refSet.put(r);r=this.xref.fetch(r)}catch(e){if(!(e instanceof MissingDataException)){warn(`ObjectLoader.#walk - requesting all data: "${e}".`);await this.xref.stream.manager.requestAllChunks();return}t.push(r);a.push({begin:e.begin,end:e.end})}}if(r instanceof BaseStream){const e=r.getBaseStreams();if(e){let i=!1;for(const t of e)if(!t.isDataLoaded){i=!0;a.push({begin:t.start,end:t.end})}i&&t.push(r)}}addChildren(r,e)}if(a.length){await this.xref.stream.manager.requestRanges(a);for(const e of t)e instanceof Ref&&this.refSet.remove(e);await this.#Be(t)}}static async load(e,t,a){if(a.stream.isDataLoaded)return;const r=new ObjectLoader(e,t,a);await r.load()}}const Un=Symbol(),jn=Symbol(),Xn=Symbol(),qn=Symbol(),Hn=Symbol(),Wn=Symbol(),Gn=Symbol(),$n=Symbol(),zn=Symbol(),Vn=Symbol("content"),Kn=Symbol("data"),Jn=Symbol(),Yn=Symbol("extra"),Zn=Symbol(),Qn=Symbol(),es=Symbol(),ts=Symbol(),as=Symbol(),rs=Symbol(),is=Symbol(),ns=Symbol(),ss=Symbol(),os=Symbol(),cs=Symbol(),ls=Symbol(),hs=Symbol(),us=Symbol(),ds=Symbol(),fs=Symbol(),gs=Symbol(),ps=Symbol(),ms=Symbol(),bs=Symbol(),ys=Symbol(),ws=Symbol(),Ss=Symbol(),xs=Symbol(),As=Symbol(),ks=Symbol(),Cs=Symbol(),vs=Symbol(),Fs=Symbol(),Is=Symbol(),Ts=Symbol(),Os=Symbol(),Ds=Symbol("namespaceId"),Ms=Symbol("nodeName"),Rs=Symbol(),Bs=Symbol(),Ns=Symbol(),Es=Symbol(),Ls=Symbol(),_s=Symbol(),Us=Symbol(),js=Symbol(),Xs=Symbol("root"),qs=Symbol(),Hs=Symbol(),Ws=Symbol(),Gs=Symbol(),$s=Symbol(),zs=Symbol(),Vs=Symbol(),Ks=Symbol(),Js=Symbol(),Ys=Symbol(),Zs=Symbol(),Qs=Symbol("uid"),eo=Symbol(),to={config:{id:0,check:e=>e.startsWith("http://www.xfa.org/schema/xci/")},connectionSet:{id:1,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-connection-set/")},datasets:{id:2,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-data/")},form:{id:3,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-form/")},localeSet:{id:4,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-locale-set/")},pdf:{id:5,check:e=>"http://ns.adobe.com/xdp/pdf/"===e},signature:{id:6,check:e=>"http://www.w3.org/2000/09/xmldsig#"===e},sourceSet:{id:7,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-source-set/")},stylesheet:{id:8,check:e=>"http://www.w3.org/1999/XSL/Transform"===e},template:{id:9,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-template/")},xdc:{id:10,check:e=>e.startsWith("http://www.xfa.org/schema/xdc/")},xdp:{id:11,check:e=>"http://ns.adobe.com/xdp/"===e},xfdf:{id:12,check:e=>"http://ns.adobe.com/xfdf/"===e},xhtml:{id:13,check:e=>"http://www.w3.org/1999/xhtml"===e},xmpmeta:{id:14,check:e=>"http://ns.adobe.com/xmpmeta/"===e}},ao={pt:e=>e,cm:e=>e/2.54*72,mm:e=>e/25.4*72,in:e=>72*e,px:e=>e},ro=/([+-]?\d+\.?\d*)(.*)/;function stripQuotes(e){return e.startsWith("'")||e.startsWith('"')?e.slice(1,-1):e}function getInteger({data:e,defaultValue:t,validate:a}){if(!e)return t;e=e.trim();const r=parseInt(e,10);return!isNaN(r)&&a(r)?r:t}function getFloat({data:e,defaultValue:t,validate:a}){if(!e)return t;e=e.trim();const r=parseFloat(e);return!isNaN(r)&&a(r)?r:t}function getKeyword({data:e,defaultValue:t,validate:a}){return e&&a(e=e.trim())?e:t}function getStringOption(e,t){return getKeyword({data:e,defaultValue:t[0],validate:e=>t.includes(e)})}function getMeasurement(e,t="0"){t||="0";if(!e)return getMeasurement(t);const a=e.trim().match(ro);if(!a)return getMeasurement(t);const[,r,i]=a,n=parseFloat(r);if(isNaN(n))return getMeasurement(t);if(0===n)return 0;const s=ao[i];return s?s(n):n}function getRatio(e){if(!e)return{num:1,den:1};const t=e.split(":",2).map(e=>parseFloat(e.trim())).filter(e=>!isNaN(e));1===t.length&&t.push(1);if(0===t.length)return{num:1,den:1};const[a,r]=t;return{num:a,den:r}}function getRelevant(e){return e?e.trim().split(/\s+/).map(e=>({excluded:"-"===e[0],viewname:e.substring(1)})):[]}class HTMLResult{static get FAILURE(){return shadow(this,"FAILURE",new HTMLResult(!1,null,null,null))}static get EMPTY(){return shadow(this,"EMPTY",new HTMLResult(!0,null,null,null))}constructor(e,t,a,r){this.success=e;this.html=t;this.bbox=a;this.breakNode=r}isBreak(){return!!this.breakNode}static breakNode(e){return new HTMLResult(!1,null,null,e)}static success(e,t=null){return new HTMLResult(!0,e,t,null)}}class FontFinder{constructor(e){this.fonts=new Map;this.cache=new Map;this.warned=new Set;this.defaultFont=null;this.add(e)}add(e,t=null){for(const t of e)this.addPdfFont(t);for(const e of this.fonts.values())e.regular||(e.regular=e.italic||e.bold||e.bolditalic);if(!t||0===t.size)return;const a=this.fonts.get("PdfJS-Fallback-PdfJS-XFA");for(const e of t)this.fonts.set(e,a)}addPdfFont(e){const t=e.cssFontInfo,a=t.fontFamily;let r=this.fonts.get(a);if(!r){r=Object.create(null);this.fonts.set(a,r);this.defaultFont||(this.defaultFont=r)}let i="";const n=parseFloat(t.fontWeight);0!==parseFloat(t.italicAngle)?i=n>=700?"bolditalic":"italic":n>=700&&(i="bold");if(!i){(e.name.includes("Bold")||e.psName?.includes("Bold"))&&(i="bold");(e.name.includes("Italic")||e.name.endsWith("It")||e.psName?.includes("Italic")||e.psName?.endsWith("It"))&&(i+="italic")}i||(i="regular");r[i]=e}getDefault(){return this.defaultFont}find(e,t=!0){let a=this.fonts.get(e)||this.cache.get(e);if(a)return a;const r=/,|-|_| |bolditalic|bold|italic|regular|it/gi;let i=e.replaceAll(r,"");a=this.fonts.get(i);if(a){this.cache.set(e,a);return a}i=i.toLowerCase();const n=[];for(const[e,t]of this.fonts.entries())e.replaceAll(r,"").toLowerCase().startsWith(i)&&n.push(t);if(0===n.length)for(const[,e]of this.fonts.entries())e.regular.name?.replaceAll(r,"").toLowerCase().startsWith(i)&&n.push(e);if(0===n.length){i=i.replaceAll(/psmt|mt/gi,"");for(const[e,t]of this.fonts.entries())e.replaceAll(r,"").toLowerCase().startsWith(i)&&n.push(t)}if(0===n.length)for(const e of this.fonts.values())e.regular.name?.replaceAll(r,"").toLowerCase().startsWith(i)&&n.push(e);if(n.length>=1){1!==n.length&&t&&warn(`XFA - Too many choices to guess the correct font: ${e}`);this.cache.set(e,n[0]);return n[0]}if(t&&!this.warned.has(e)){this.warned.add(e);warn(`XFA - Cannot find the font: ${e}`)}return null}}function selectFont(e,t){return"italic"===e.posture?"bold"===e.weight?t.bolditalic:t.italic:"bold"===e.weight?t.bold:t.regular}class text_FontInfo{constructor(e,t,a,r){this.lineHeight=a;this.paraMargin=t||{top:0,bottom:0,left:0,right:0};if(!e){[this.pdfFont,this.xfaFont]=this.defaultFont(r);return}this.xfaFont={typeface:e.typeface,posture:e.posture,weight:e.weight,size:e.size,letterSpacing:e.letterSpacing};const i=r.find(e.typeface);if(i){this.pdfFont=selectFont(e,i);this.pdfFont||([this.pdfFont,this.xfaFont]=this.defaultFont(r))}else[this.pdfFont,this.xfaFont]=this.defaultFont(r)}defaultFont(e){const t=e.find("Helvetica",!1)||e.find("Myriad Pro",!1)||e.find("Arial",!1)||e.getDefault();if(t?.regular){const e=t.regular;return[e,{typeface:e.cssFontInfo.fontFamily,posture:"normal",weight:"normal",size:10,letterSpacing:0}]}return[null,{typeface:"Courier",posture:"normal",weight:"normal",size:10,letterSpacing:0}]}}class FontSelector{constructor(e,t,a,r){this.fontFinder=r;this.stack=[new text_FontInfo(e,t,a,r)]}pushData(e,t,a){const r=this.stack.at(-1);for(const t of["typeface","posture","weight","size","letterSpacing"])e[t]||(e[t]=r.xfaFont[t]);for(const e of["top","bottom","left","right"])isNaN(t[e])&&(t[e]=r.paraMargin[e]);const i=new text_FontInfo(e,t,a||r.lineHeight,this.fontFinder);i.pdfFont||(i.pdfFont=r.pdfFont);this.stack.push(i)}popFont(){this.stack.pop()}topFont(){return this.stack.at(-1)}}class TextMeasure{constructor(e,t,a,r){this.glyphs=[];this.fontSelector=new FontSelector(e,t,a,r);this.extraHeight=0}pushData(e,t,a){this.fontSelector.pushData(e,t,a)}popFont(e){return this.fontSelector.popFont()}addPara(){const e=this.fontSelector.topFont();this.extraHeight+=e.paraMargin.top+e.paraMargin.bottom}addString(e){if(!e)return;const t=this.fontSelector.topFont(),a=t.xfaFont.size;if(t.pdfFont){const r=t.xfaFont.letterSpacing,i=t.pdfFont,n=i.lineHeight||1.2,s=t.lineHeight||Math.max(1.2,n)*a,o=n-(void 0===i.lineGap?.2:i.lineGap),c=Math.max(1,o)*a,l=a/1e3,h=i.defaultWidth||i.charsToGlyphs(" ")[0].width;for(const t of e.split(/[\u2029\n]/)){const e=i.encodeString(t).join(""),a=i.charsToGlyphs(e);for(const e of a){const t=e.width||h;this.glyphs.push([t*l+r,s,c,e.unicode,!1])}this.glyphs.push([0,0,0,"\n",!0])}this.glyphs.pop();return}for(const t of e.split(/[\u2029\n]/)){for(const e of t.split(""))this.glyphs.push([a,1.2*a,a,e,!1]);this.glyphs.push([0,0,0,"\n",!0])}this.glyphs.pop()}compute(e){let t=-1,a=0,r=0,i=0,n=0,s=0,o=!1,c=!0;for(let l=0,h=this.glyphs.length;le){r=Math.max(r,n);n=0;i+=s;s=m;t=-1;a=0;o=!0;c=!1}else{s=Math.max(m,s);a=n;n+=h;t=l}else if(n+h>e){i+=s;s=m;if(-1!==t){l=t;r=Math.max(r,a);n=0;t=-1;a=0}else{r=Math.max(r,n);n=h}o=!0;c=!1}else{n+=h;s=Math.max(m,s)}}r=Math.max(r,n);i+=s+this.extraHeight;return{width:1.02*r,height:i,isBroken:o}}}const io=/^[^.[]+/,no=/^[^\]]+/,so=0,oo=1,co=2,lo=3,ho=4,uo=new Map([["$data",(e,t)=>e.datasets?e.datasets.data:e],["$record",(e,t)=>(e.datasets?e.datasets.data:e)[ls]()[0]],["$template",(e,t)=>e.template],["$connectionSet",(e,t)=>e.connectionSet],["$form",(e,t)=>e.form],["$layout",(e,t)=>e.layout],["$host",(e,t)=>e.host],["$dataWindow",(e,t)=>e.dataWindow],["$event",(e,t)=>e.event],["!",(e,t)=>e.datasets],["$xfa",(e,t)=>e],["xfa",(e,t)=>e],["$",(e,t)=>t]]),fo=new WeakMap;function parseIndex(e){return"*"===(e=e.trim())?1/0:parseInt(e,10)||0}function parseExpression(e,t,a=!0){let r=e.match(io);if(!r)return null;let[i]=r;const n=[{name:i,cacheName:"."+i,index:0,js:null,formCalc:null,operator:so}];let s=i.length;for(;s0&&h.push(e)}if(0===h.length&&!o&&0===c){const a=t[fs]();if(!(t=a))return null;c=-1;e=[t];continue}e=isFinite(l)?h.filter(e=>le[l]):h.flat()}return 0===e.length?null:e}function createDataNode(e,t,a){const r=parseExpression(a);if(!r)return null;if(r.some(e=>e.operator===oo))return null;const i=uo.get(r[0].name);let n=0;if(i){e=i(e,t);n=1}else e=t||e;for(let t=r.length;ne[Vs]()).join("")}get[mo](){const e=Object.getPrototypeOf(this);if(!e._attributes){const t=e._attributes=new Set;for(const e of Object.getOwnPropertyNames(this)){if(null===this[e]||this[e]instanceof XFAObject||this[e]instanceof XFAObjectArray)break;t.add(e)}}return shadow(this,mo,e._attributes)}[ks](e){let t=this;for(;t;){if(t===e)return!0;t=t[fs]()}return!1}[fs](){return this[Io]}[ds](){return this[fs]()}[ls](e=null){return e?this[e]:this[bo]}[Jn](){const e=Object.create(null);this[Vn]&&(e.$content=this[Vn]);for(const t of Object.getOwnPropertyNames(this)){const a=this[t];null!==a&&(a instanceof XFAObject?e[t]=a[Jn]():a instanceof XFAObjectArray?a.isEmpty()||(e[t]=a.dump()):e[t]=a)}return e}[Zs](){return null}[Js](){return HTMLResult.EMPTY}*[hs](){for(const e of this[ls]())yield e}*[xo](e,t){for(const a of this[hs]())if(!e||t===e.has(a[Ms])){const e=this[as](),t=a[Js](e);t.success||(this[Yn].failingNode=a);yield t}}[Qn](){return null}[jn](e,t){this[Yn].children.push(e)}[as](){}[qn]({filter:e=null,include:t=!0}){if(this[Yn].generator){const e=this[as](),t=this[Yn].failingNode[Js](e);if(!t.success)return t;t.html&&this[jn](t.html,t.bbox);delete this[Yn].failingNode}else this[Yn].generator=this[xo](e,t);for(;;){const e=this[Yn].generator.next();if(e.done)break;const t=e.value;if(!t.success)return t;t.html&&this[jn](t.html,t.bbox)}this[Yn].generator=null;return HTMLResult.EMPTY}[Gs](e){this[Do]=new Set(Object.keys(e))}[ko](e){const t=this[mo],a=this[Do];return[...e].filter(e=>t.has(e)&&!a.has(e))}[qs](e,t=new Set){for(const a of this[bo])a[Oo](e,t)}[Oo](e,t){const a=this[Ao](e,t);a?this[go](a,e,t):this[qs](e,t)}[Ao](e,t){const{use:a,usehref:r}=this;if(!a&&!r)return null;let i=null,n=null,s=null,o=a;if(r){o=r;r.startsWith("#som(")&&r.endsWith(")")?n=r.slice(5,-1):r.startsWith(".#som(")&&r.endsWith(")")?n=r.slice(6,-1):r.startsWith("#")?s=r.slice(1):r.startsWith(".#")&&(s=r.slice(2))}else a.startsWith("#")?s=a.slice(1):n=a;this.use=this.usehref="";if(s)i=e.get(s);else{i=searchNode(e.get(Xs),this,n,!0,!1);i&&(i=i[0])}if(!i){warn(`XFA - Invalid prototype reference: ${o}.`);return null}if(i[Ms]!==this[Ms]){warn(`XFA - Incompatible prototype: ${i[Ms]} !== ${this[Ms]}.`);return null}if(t.has(i)){warn("XFA - Cycle detected in prototypes use.");return null}t.add(i);const c=i[Ao](e,t);c&&i[go](c,e,t);i[qs](e,t);t.delete(i);return i}[go](e,t,a){if(a.has(e)){warn("XFA - Cycle detected in prototypes use.");return}!this[Vn]&&e[Vn]&&(this[Vn]=e[Vn]);new Set(a).add(e);for(const t of this[ko](e[Do])){this[t]=e[t];this[Do]&&this[Do].add(t)}for(const r of Object.getOwnPropertyNames(this)){if(this[mo].has(r))continue;const i=this[r],n=e[r];if(i instanceof XFAObjectArray){for(const e of i[bo])e[Oo](t,a);for(let r=i[bo].length,s=n[bo].length;rXFAObject[yo](e)):"object"==typeof e&&null!==e?Object.assign({},e):e}[$n](){const e=Object.create(Object.getPrototypeOf(this));for(const t of Object.getOwnPropertySymbols(this))try{e[t]=this[t]}catch{shadow(e,t,this[t])}e[Qs]=`${e[Ms]}${Ro++}`;e[bo]=[];for(const t of Object.getOwnPropertyNames(this)){if(this[mo].has(t)){e[t]=XFAObject[yo](this[t]);continue}const a=this[t];e[t]=a instanceof XFAObjectArray?new XFAObjectArray(a[vo]):null}for(const t of this[bo]){const a=t[Ms],r=t[$n]();e[bo].push(r);r[Io]=e;null===e[a]?e[a]=r:e[a][bo].push(r)}return e}[ls](e=null){return e?this[bo].filter(t=>t[Ms]===e):this[bo]}[rs](e){return this[e]}[is](e,t,a=!0){return Array.from(this[ns](e,t,a))}*[ns](e,t,a=!0){if("parent"!==e){for(const a of this[bo]){a[Ms]===e&&(yield a);a.name===e&&(yield a);(t||a[Is]())&&(yield*a[ns](e,t,!1))}a&&this[mo].has(e)&&(yield new XFAAttribute(this,e,this[e]))}else yield this[Io]}}class XFAObjectArray{constructor(e=1/0){this[vo]=e;this[bo]=[]}get isXFAObject(){return!1}get isXFAObjectArray(){return!0}push(e){if(this[bo].length<=this[vo]){this[bo].push(e);return!0}warn(`XFA - node "${e[Ms]}" accepts no more than ${this[vo]} children`);return!1}isEmpty(){return 0===this[bo].length}dump(){return 1===this[bo].length?this[bo][0][Jn]():this[bo].map(e=>e[Jn]())}[$n](){const e=new XFAObjectArray(this[vo]);e[bo]=this[bo].map(e=>e[$n]());return e}get children(){return this[bo]}clear(){this[bo].length=0}}class XFAAttribute{constructor(e,t,a){this[Io]=e;this[Ms]=t;this[Vn]=a;this[zn]=!1;this[Qs]="attribute"+Ro++}[fs](){return this[Io]}[As](){return!0}[ss](){return this[Vn].trim()}[$s](e){e=e.value||"";this[Vn]=e.toString()}[Vs](){return this[Vn]}[ks](e){return this[Io]===e||this[Io][ks](e)}}class XmlObject extends XFAObject{constructor(e,t,a={}){super(e,t);this[Vn]="";this[wo]=null;if("#text"!==t){const e=new Map;this[po]=e;for(const[t,r]of Object.entries(a))e.set(t,new XFAAttribute(this,t,r));if(a.hasOwnProperty(Rs)){const e=a[Rs].xfa.dataNode;void 0!==e&&("dataGroup"===e?this[wo]=!1:"dataValue"===e&&(this[wo]=!0))}}this[zn]=!1}[Ys](e){const t=this[Ms];if("#text"===t){e.push(encodeToXmlString(this[Vn]));return}const a=utf8StringToString(t),r=this[Ds]===Bo?"xfa:":"";e.push(`<${r}${a}`);for(const[t,a]of this[po].entries()){const r=utf8StringToString(t);e.push(` ${r}="${encodeToXmlString(a[Vn])}"`)}null!==this[wo]&&(this[wo]?e.push(' xfa:dataNode="dataValue"'):e.push(' xfa:dataNode="dataGroup"'));if(this[Vn]||0!==this[bo].length){e.push(">");if(this[Vn])"string"==typeof this[Vn]?e.push(encodeToXmlString(this[Vn])):this[Vn][Ys](e);else for(const t of this[bo])t[Ys](e);e.push(``)}else e.push("/>")}[Bs](e){if(this[Vn]){const e=new XmlObject(this[Ds],"#text");this[Xn](e);e[Vn]=this[Vn];this[Vn]=""}this[Xn](e);return!0}[Es](e){this[Vn]+=e}[Zn](){if(this[Vn]&&this[bo].length>0){const e=new XmlObject(this[Ds],"#text");this[Xn](e);e[Vn]=this[Vn];delete this[Vn]}}[Js](){return"#text"===this[Ms]?HTMLResult.success({name:"#text",value:this[Vn]}):HTMLResult.EMPTY}[ls](e=null){return e?this[bo].filter(t=>t[Ms]===e):this[bo]}[ts](){return this[po]}[rs](e){const t=this[po].get(e);return void 0!==t?t:this[ls](e)}*[ns](e,t){const a=this[po].get(e);a&&(yield a);for(const a of this[bo]){a[Ms]===e&&(yield a);t&&(yield*a[ns](e,t))}}*[es](e,t){const a=this[po].get(e);!a||t&&a[zn]||(yield a);for(const a of this[bo])yield*a[es](e,t)}*[cs](e,t,a){for(const r of this[bo]){r[Ms]!==e||a&&r[zn]||(yield r);t&&(yield*r[cs](e,t,a))}}[As](){return null===this[wo]?0===this[bo].length||this[bo][0][Ds]===to.xhtml.id:this[wo]}[ss](){return null===this[wo]?0===this[bo].length?this[Vn].trim():this[bo][0][Ds]===to.xhtml.id?this[bo][0][Vs]().trim():null:this[Vn].trim()}[$s](e){e=e.value||"";this[Vn]=e.toString()}[Jn](e=!1){const t=Object.create(null);e&&(t.$ns=this[Ds]);this[Vn]&&(t.$content=this[Vn]);t.$name=this[Ms];t.children=[];for(const a of this[bo])t.children.push(a[Jn](e));t.attributes=Object.create(null);for(const[e,a]of this[po])t.attributes[e]=a[Vn];return t}}class ContentObject extends XFAObject{constructor(e,t){super(e,t);this[Vn]=""}[Es](e){this[Vn]+=e}[Zn](){}}class OptionObject extends ContentObject{constructor(e,t,a){super(e,t);this[Fo]=a}[Zn](){this[Vn]=getKeyword({data:this[Vn],defaultValue:this[Fo][0],validate:e=>this[Fo].includes(e)})}[Hn](e){super[Hn](e);delete this[Fo]}}class StringObject extends ContentObject{[Zn](){this[Vn]=this[Vn].trim()}}class IntegerObject extends ContentObject{constructor(e,t,a,r){super(e,t);this[So]=a;this[Mo]=r}[Zn](){this[Vn]=getInteger({data:this[Vn],defaultValue:this[So],validate:this[Mo]})}[Hn](e){super[Hn](e);delete this[So];delete this[Mo]}}class Option01 extends IntegerObject{constructor(e,t){super(e,t,0,e=>1===e)}}class Option10 extends IntegerObject{constructor(e,t){super(e,t,1,e=>0===e)}}function measureToString(e){return"string"==typeof e?"0px":Number.isInteger(e)?`${e}px`:`${e.toFixed(2)}px`}const No={anchorType(e,t){const a=e[ds]();if(a&&(!a.layout||"position"===a.layout)){"transform"in t||(t.transform="");switch(e.anchorType){case"bottomCenter":t.transform+="translate(-50%, -100%)";break;case"bottomLeft":t.transform+="translate(0,-100%)";break;case"bottomRight":t.transform+="translate(-100%,-100%)";break;case"middleCenter":t.transform+="translate(-50%,-50%)";break;case"middleLeft":t.transform+="translate(0,-50%)";break;case"middleRight":t.transform+="translate(-100%,-50%)";break;case"topCenter":t.transform+="translate(-50%,0)";break;case"topRight":t.transform+="translate(-100%,0)"}}},dimensions(e,t){const a=e[ds]();let r=e.w;const i=e.h;if(a.layout?.includes("row")){const t=a[Yn],i=e.colSpan;let n;if(-1===i){n=Math.sumPrecise(t.columnWidths.slice(t.currentColumn));t.currentColumn=0}else{n=Math.sumPrecise(t.columnWidths.slice(t.currentColumn,t.currentColumn+i));t.currentColumn=(t.currentColumn+e.colSpan)%t.columnWidths.length}isNaN(n)||(r=e.w=n)}t.width=""!==r?measureToString(r):"auto";t.height=""!==i?measureToString(i):"auto"},position(e,t){const a=e[ds]();if(!a?.layout||"position"===a.layout){t.position="absolute";t.left=measureToString(e.x);t.top=measureToString(e.y)}},rotate(e,t){if(e.rotate){"transform"in t||(t.transform="");t.transform+=`rotate(-${e.rotate}deg)`;t.transformOrigin="top left"}},presence(e,t){switch(e.presence){case"invisible":t.visibility="hidden";break;case"hidden":case"inactive":t.display="none"}},hAlign(e,t){if("para"===e[Ms])switch(e.hAlign){case"justifyAll":t.textAlign="justify-all";break;case"radix":t.textAlign="left";break;default:t.textAlign=e.hAlign}else switch(e.hAlign){case"left":t.alignSelf="start";break;case"center":t.alignSelf="center";break;case"right":t.alignSelf="end"}},margin(e,t){e.margin&&(t.margin=e.margin[Zs]().margin)}};function setMinMaxDimensions(e,t){if("position"===e[ds]().layout){e.minW>0&&(t.minWidth=measureToString(e.minW));e.maxW>0&&(t.maxWidth=measureToString(e.maxW));e.minH>0&&(t.minHeight=measureToString(e.minH));e.maxH>0&&(t.maxHeight=measureToString(e.maxH))}}function layoutText(e,t,a,r,i,n){const s=new TextMeasure(t,a,r,i);"string"==typeof e?s.addString(e):e[Ls](s);return s.compute(n)}function layoutNode(e,t){let a=null,r=null,i=!1;if((!e.w||!e.h)&&e.value){let n=0,s=0;if(e.margin){n=e.margin.leftInset+e.margin.rightInset;s=e.margin.topInset+e.margin.bottomInset}let o=null,c=null;if(e.para){c=Object.create(null);o=""===e.para.lineHeight?null:e.para.lineHeight;c.top=""===e.para.spaceAbove?0:e.para.spaceAbove;c.bottom=""===e.para.spaceBelow?0:e.para.spaceBelow;c.left=""===e.para.marginLeft?0:e.para.marginLeft;c.right=""===e.para.marginRight?0:e.para.marginRight}let l=e.font;if(!l){const t=e[gs]();let a=e[fs]();for(;a&&a!==t;){if(a.font){l=a.font;break}a=a[fs]()}}const h=(e.w||t.width)-n,u=e[ps].fontFinder;if(e.value.exData&&e.value.exData[Vn]&&"text/html"===e.value.exData.contentType){const t=layoutText(e.value.exData[Vn],l,c,o,u,h);r=t.width;a=t.height;i=t.isBroken}else{const t=e.value[Vs]();if(t){const e=layoutText(t,l,c,o,u,h);r=e.width;a=e.height;i=e.isBroken}}null===r||e.w||(r+=n);null===a||e.h||(a+=s)}return{w:r,h:a,isBroken:i}}function computeBbox(e,t,a){let r;if(""!==e.w&&""!==e.h)r=[e.x,e.y,e.w,e.h];else{if(!a)return null;let i=e.w;if(""===i){if(0===e.maxW){const t=e[ds]();i="position"===t.layout&&""!==t.w?0:e.minW}else i=Math.min(e.maxW,a.width);t.attributes.style.width=measureToString(i)}let n=e.h;if(""===n){if(0===e.maxH){const t=e[ds]();n="position"===t.layout&&""!==t.h?0:e.minH}else n=Math.min(e.maxH,a.height);t.attributes.style.height=measureToString(n)}r=[e.x,e.y,i,n]}return r}function fixDimensions(e){const t=e[ds]();if(t.layout?.includes("row")){const a=t[Yn],r=e.colSpan;let i;i=-1===r?Math.sumPrecise(a.columnWidths.slice(a.currentColumn)):Math.sumPrecise(a.columnWidths.slice(a.currentColumn,a.currentColumn+r));isNaN(i)||(e.w=i)}t.layout&&"position"!==t.layout&&(e.x=e.y=0);"table"===e.layout&&""===e.w&&Array.isArray(e.columnWidths)&&(e.w=Math.sumPrecise(e.columnWidths))}function layoutClass(e){switch(e.layout){case"position":default:return"xfaPosition";case"lr-tb":return"xfaLrTb";case"rl-row":return"xfaRlRow";case"rl-tb":return"xfaRlTb";case"row":return"xfaRow";case"table":return"xfaTable";case"tb":return"xfaTb"}}function toStyle(e,...t){const a=Object.create(null);for(const r of t){const t=e[r];if(null!==t)if(No.hasOwnProperty(r))No[r](e,a);else if(t instanceof XFAObject){const e=t[Zs]();e?Object.assign(a,e):warn(`(DEBUG) - XFA - style for ${r} not implemented yet`)}}return a}function createWrapper(e,t){const{attributes:a}=t,{style:r}=a,i={name:"div",attributes:{class:["xfaWrapper"],style:Object.create(null)},children:[]};a.class.push("xfaWrapped");if(e.border){const{widths:a,insets:n}=e.border[Yn];let s,o,c=n[0],l=n[3];const h=n[0]+n[2],u=n[1]+n[3];switch(e.border.hand){case"even":c-=a[0]/2;l-=a[3]/2;s=`calc(100% + ${(a[1]+a[3])/2-u}px)`;o=`calc(100% + ${(a[0]+a[2])/2-h}px)`;break;case"left":c-=a[0];l-=a[3];s=`calc(100% + ${a[1]+a[3]-u}px)`;o=`calc(100% + ${a[0]+a[2]-h}px)`;break;case"right":s=u?`calc(100% - ${u}px)`:"100%";o=h?`calc(100% - ${h}px)`:"100%"}const d=["xfaBorder"];isPrintOnly(e.border)&&d.push("xfaPrintOnly");const f={name:"div",attributes:{class:d,style:{top:`${c}px`,left:`${l}px`,width:s,height:o}},children:[]};for(const e of["border","borderWidth","borderColor","borderRadius","borderStyle"])if(void 0!==r[e]){f.attributes.style[e]=r[e];delete r[e]}i.children.push(f,t)}else i.children.push(t);for(const e of["background","backgroundClip","top","left","width","height","minWidth","minHeight","maxWidth","maxHeight","transform","transformOrigin","visibility"])if(void 0!==r[e]){i.attributes.style[e]=r[e];delete r[e]}i.attributes.style.position="absolute"===r.position?"absolute":"relative";delete r.position;if(r.alignSelf){i.attributes.style.alignSelf=r.alignSelf;delete r.alignSelf}return i}function fixTextIndent(e){const t=getMeasurement(e.textIndent,"0px");if(t>=0)return;const a="padding"+("left"===("right"===e.textAlign?"right":"left")?"Left":"Right"),r=getMeasurement(e[a],"0px");e[a]=r-t+"px"}function setAccess(e,t){switch(e.access){case"nonInteractive":t.push("xfaNonInteractive");break;case"readOnly":t.push("xfaReadOnly");break;case"protected":t.push("xfaDisabled")}}function isPrintOnly(e){return e.relevant.length>0&&!e.relevant[0].excluded&&"print"===e.relevant[0].viewname}function getCurrentPara(e){const t=e[gs]()[Yn].paraStack;return t.length?t.at(-1):null}function setPara(e,t,a){if(a.attributes.class?.includes("xfaRich")){if(t){""===e.h&&(t.height="auto");""===e.w&&(t.width="auto")}const r=getCurrentPara(e);if(r){const e=a.attributes.style;e.display="flex";e.flexDirection="column";switch(r.vAlign){case"top":e.justifyContent="start";break;case"bottom":e.justifyContent="end";break;case"middle":e.justifyContent="center"}const t=r[Zs]();for(const[a,r]of Object.entries(t))a in e||(e[a]=r)}}}function setFontFamily(e,t,a,r){if(!a){delete r.fontFamily;return}const i=stripQuotes(e.typeface);r.fontFamily=`"${i}"`;const n=a.find(i);if(n){const{fontFamily:a}=n.regular.cssFontInfo;a!==i&&(r.fontFamily=`"${a}"`);const s=getCurrentPara(t);if(s&&""!==s.lineHeight)return;if(r.lineHeight)return;const o=selectFont(e,n);o&&(r.lineHeight=Math.max(1.2,o.lineHeight))}}function fixURL(e){const t=createValidAbsoluteUrl(e,null,{addDefaultProtocol:!0,tryConvertEncoding:!0});return t?t.href:null}function createLine(e,t){return{name:"div",attributes:{class:["lr-tb"===e.layout?"xfaLr":"xfaRl"]},children:t}}function flushHTML(e){if(!e[Yn])return null;const t={name:"div",attributes:e[Yn].attributes,children:e[Yn].children};if(e[Yn].failingNode){const a=e[Yn].failingNode[Qn]();a&&(e.layout.endsWith("-tb")?t.children.push(createLine(e,[a])):t.children.push(a))}return 0===t.children.length?null:t}function addHTML(e,t,a){const r=e[Yn],i=r.availableSpace,[n,s,o,c]=a;switch(e.layout){case"position":r.width=Math.max(r.width,n+o);r.height=Math.max(r.height,s+c);r.children.push(t);break;case"lr-tb":case"rl-tb":if(!r.line||1===r.attempt){r.line=createLine(e,[]);r.children.push(r.line);r.numberInLine=0}r.numberInLine+=1;r.line.children.push(t);if(0===r.attempt){r.currentWidth+=o;r.height=Math.max(r.height,r.prevHeight+c)}else{r.currentWidth=o;r.prevHeight=r.height;r.height+=c;r.attempt=0}r.width=Math.max(r.width,r.currentWidth);break;case"rl-row":case"row":{r.children.push(t);r.width+=o;r.height=Math.max(r.height,c);const e=measureToString(r.height);for(const t of r.children)t.attributes.style.height=e;break}case"table":case"tb":r.width=MathClamp(o,r.width,i.width);r.height+=c;r.children.push(t)}}function getAvailableSpace(e){const t=e[Yn].availableSpace,a=e.margin?e.margin.topInset+e.margin.bottomInset:0,r=e.margin?e.margin.leftInset+e.margin.rightInset:0;switch(e.layout){case"lr-tb":case"rl-tb":return 0===e[Yn].attempt?{width:t.width-r-e[Yn].currentWidth,height:t.height-a-e[Yn].prevHeight}:{width:t.width-r,height:t.height-a-e[Yn].height};case"rl-row":case"row":return{width:Math.sumPrecise(e[Yn].columnWidths.slice(e[Yn].currentColumn)),height:t.height-r};case"table":case"tb":return{width:t.width-r,height:t.height-a-e[Yn].height};default:return t}}function checkDimensions(e,t){if(null===e[gs]()[Yn].firstUnsplittable)return!0;if(0===e.w||0===e.h)return!0;const a=e[ds](),r=a[Yn]?.attempt||0,[,i,n,s]=function getTransformedBBox(e){let t,a,r=""===e.w?NaN:e.w,i=""===e.h?NaN:e.h,[n,s]=[0,0];switch(e.anchorType||""){case"bottomCenter":[n,s]=[r/2,i];break;case"bottomLeft":[n,s]=[0,i];break;case"bottomRight":[n,s]=[r,i];break;case"middleCenter":[n,s]=[r/2,i/2];break;case"middleLeft":[n,s]=[0,i/2];break;case"middleRight":[n,s]=[r,i/2];break;case"topCenter":[n,s]=[r/2,0];break;case"topRight":[n,s]=[r,0]}switch(e.rotate||0){case 0:[t,a]=[-n,-s];break;case 90:[t,a]=[-s,n];[r,i]=[i,-r];break;case 180:[t,a]=[n,s];[r,i]=[-r,-i];break;case 270:[t,a]=[s,-n];[r,i]=[-i,r]}return[e.x+t+Math.min(0,r),e.y+a+Math.min(0,i),Math.abs(r),Math.abs(i)]}(e);switch(a.layout){case"lr-tb":case"rl-tb":return 0===r?e[gs]()[Yn].noLayoutFailure?""!==e.w?Math.round(n-t.width)<=2:t.width>2:!(""!==e.h&&Math.round(s-t.height)>2)&&(""!==e.w?Math.round(n-t.width)<=2||0===a[Yn].numberInLine&&t.height>2:t.width>2):!!e[gs]()[Yn].noLayoutFailure||!(""!==e.h&&Math.round(s-t.height)>2)&&((""===e.w||Math.round(n-t.width)<=2||!a[Fs]())&&t.height>2);case"table":case"tb":return!!e[gs]()[Yn].noLayoutFailure||(""===e.h||e[vs]()?(""===e.w||Math.round(n-t.width)<=2||!a[Fs]())&&t.height>2:Math.round(s-t.height)<=2);case"position":if(e[gs]()[Yn].noLayoutFailure)return!0;if(""===e.h||Math.round(s+i-t.height)<=2)return!0;return s+i>e[gs]()[Yn].currentContentArea.h;case"rl-row":case"row":return!!e[gs]()[Yn].noLayoutFailure||(""===e.h||Math.round(s-t.height)<=2);default:return!0}}const Po=to.template.id,Eo="http://www.w3.org/2000/svg",Lo=/^H(\d+)$/,_o=new Set(["image/gif","image/jpeg","image/jpg","image/pjpeg","image/png","image/apng","image/x-png","image/bmp","image/x-ms-bmp","image/tiff","image/tif","application/octet-stream"]),Uo=[[[66,77],"image/bmp"],[[255,216,255],"image/jpeg"],[[73,73,42,0],"image/tiff"],[[77,77,0,42],"image/tiff"],[[71,73,70,56,57,97],"image/gif"],[[137,80,78,71,13,10,26,10],"image/png"]];function getBorderDims(e){if(!e||!e.border)return{w:0,h:0};const t=e.border[os]();return t?{w:t.widths[0]+t.widths[2]+t.insets[0]+t.insets[2],h:t.widths[1]+t.widths[3]+t.insets[1]+t.insets[3]}:{w:0,h:0}}function hasMargin(e){return e.margin&&(e.margin.topInset||e.margin.rightInset||e.margin.bottomInset||e.margin.leftInset)}function _setValue(e,t){if(!e.value){const t=new Value({});e[Xn](t);e.value=t}e.value[$s](t)}function*getContainedChildren(e){for(const t of e[ls]())t instanceof SubformSet?yield*t[hs]():yield t}function isRequired(e){return"error"===e.validate?.nullTest}function setTabIndex(e){for(;e;){if(!e.traversal){e[zs]=e[fs]()[zs];return}if(e[zs])return;let t=null;for(const a of e.traversal[ls]())if("next"===a.operation){t=a;break}if(!t||!t.ref){e[zs]=e[fs]()[zs];return}const a=e[gs]();e[zs]=++a[zs];const r=a[Hs](t.ref,e);if(!r)return;e=r[0]}}function applyAssist(e,t){const a=e.assist;if(a){const e=a[Js]();e&&(t.title=e);const r=a.role.match(Lo);if(r){const e="heading",a=r[1];t.role=e;t["aria-level"]=a}}if("table"===e.layout)t.role="table";else if("row"===e.layout)t.role="row";else{const a=e[fs]();"row"===a.layout&&(t.role="TH"===a.assist?.role?"columnheader":"cell")}}function ariaLabel(e){if(!e.assist)return null;const t=e.assist;return t.speak&&""!==t.speak[Vn]?t.speak[Vn]:t.toolTip?t.toolTip[Vn]:null}function valueToHtml(e){return HTMLResult.success({name:"div",attributes:{class:["xfaRich"],style:Object.create(null)},children:[{name:"span",attributes:{style:Object.create(null)},value:e}]})}function setFirstUnsplittable(e){const t=e[gs]();if(null===t[Yn].firstUnsplittable){t[Yn].firstUnsplittable=e;t[Yn].noLayoutFailure=!0}}function unsetFirstUnsplittable(e){const t=e[gs]();t[Yn].firstUnsplittable===e&&(t[Yn].noLayoutFailure=!1)}function handleBreak(e){if(e[Yn])return!1;e[Yn]=Object.create(null);if("auto"===e.targetType)return!1;const t=e[gs]();let a=null;if(e.target){a=t[Hs](e.target,e[fs]());if(!a)return!1;a=a[0]}const{currentPageArea:r,currentContentArea:i}=t[Yn];if("pageArea"===e.targetType){a instanceof PageArea||(a=null);if(e.startNew){e[Yn].target=a||r;return!0}if(a&&a!==r){e[Yn].target=a;return!0}return!1}a instanceof ContentArea||(a=null);const n=a&&a[fs]();let s,o=n;if(e.startNew)if(a){const e=n.contentArea.children,t=e.indexOf(i),r=e.indexOf(a);-1!==t&&te;r[Yn].noLayoutFailure=!0;const s=t[Js](a);e[jn](s.html,s.bbox);r[Yn].noLayoutFailure=i;t[ds]=n}class AppearanceFilter extends StringObject{constructor(e){super(Po,"appearanceFilter");this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||""}}class Arc extends XFAObject{constructor(e){super(Po,"arc",!0);this.circular=getInteger({data:e.circular,defaultValue:0,validate:e=>1===e});this.hand=getStringOption(e.hand,["even","left","right"]);this.id=e.id||"";this.startAngle=getFloat({data:e.startAngle,defaultValue:0,validate:e=>!0});this.sweepAngle=getFloat({data:e.sweepAngle,defaultValue:360,validate:e=>!0});this.use=e.use||"";this.usehref=e.usehref||"";this.edge=null;this.fill=null}[Js](){const e=this.edge||new Edge({}),t=e[Zs](),a=Object.create(null);"visible"===this.fill?.presence?Object.assign(a,this.fill[Zs]()):a.fill="transparent";a.strokeWidth=measureToString("visible"===e.presence?e.thickness:0);a.stroke=t.color;let r;const i={xmlns:Eo,style:{width:"100%",height:"100%",overflow:"visible"}};if(360===this.sweepAngle)r={name:"ellipse",attributes:{xmlns:Eo,cx:"50%",cy:"50%",rx:"50%",ry:"50%",style:a}};else{const e=this.startAngle*Math.PI/180,t=this.sweepAngle*Math.PI/180,n=this.sweepAngle>180?1:0,[s,o,c,l]=[50*(1+Math.cos(e)),50*(1-Math.sin(e)),50*(1+Math.cos(e+t)),50*(1-Math.sin(e+t))];r={name:"path",attributes:{xmlns:Eo,d:`M ${s} ${o} A 50 50 0 ${n} 0 ${c} ${l}`,vectorEffect:"non-scaling-stroke",style:a}};Object.assign(i,{viewBox:"0 0 100 100",preserveAspectRatio:"none"})}const n={name:"svg",children:[r],attributes:i};if(hasMargin(this[fs]()[fs]()))return HTMLResult.success({name:"div",attributes:{style:{display:"inline",width:"100%",height:"100%"}},children:[n]});n.attributes.style.position="absolute";return HTMLResult.success(n)}}class Area extends XFAObject{constructor(e){super(Po,"area",!0);this.colSpan=getInteger({data:e.colSpan,defaultValue:1,validate:e=>e>=1||-1===e});this.id=e.id||"";this.name=e.name||"";this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.x=getMeasurement(e.x,"0pt");this.y=getMeasurement(e.y,"0pt");this.desc=null;this.extras=null;this.area=new XFAObjectArray;this.draw=new XFAObjectArray;this.exObject=new XFAObjectArray;this.exclGroup=new XFAObjectArray;this.field=new XFAObjectArray;this.subform=new XFAObjectArray;this.subformSet=new XFAObjectArray}*[hs](){yield*getContainedChildren(this)}[Is](){return!0}[xs](){return!0}[jn](e,t){const[a,r,i,n]=t;this[Yn].width=Math.max(this[Yn].width,a+i);this[Yn].height=Math.max(this[Yn].height,r+n);this[Yn].children.push(e)}[as](){return this[Yn].availableSpace}[Js](e){const t=toStyle(this,"position"),a={style:t,id:this[Qs],class:["xfaArea"]};isPrintOnly(this)&&a.class.push("xfaPrintOnly");this.name&&(a.xfaName=this.name);const r=[];this[Yn]={children:r,width:0,height:0,availableSpace:e};const i=this[qn]({filter:new Set(["area","draw","field","exclGroup","subform","subformSet"]),include:!0});if(!i.success){if(i.isBreak())return i;delete this[Yn];return HTMLResult.FAILURE}t.width=measureToString(this[Yn].width);t.height=measureToString(this[Yn].height);const n={name:"div",attributes:a,children:r},s=[this.x,this.y,this[Yn].width,this[Yn].height];delete this[Yn];return HTMLResult.success(n,s)}}class Assist extends XFAObject{constructor(e){super(Po,"assist",!0);this.id=e.id||"";this.role=e.role||"";this.use=e.use||"";this.usehref=e.usehref||"";this.speak=null;this.toolTip=null}[Js](){return this.toolTip?.[Vn]||null}}class Barcode extends XFAObject{constructor(e){super(Po,"barcode",!0);this.charEncoding=getKeyword({data:e.charEncoding?e.charEncoding.toLowerCase():"",defaultValue:"",validate:e=>["utf-8","big-five","fontspecific","gbk","gb-18030","gb-2312","ksc-5601","none","shift-jis","ucs-2","utf-16"].includes(e)||e.match(/iso-8859-\d{2}/)});this.checksum=getStringOption(e.checksum,["none","1mod10","1mod10_1mod11","2mod10","auto"]);this.dataColumnCount=getInteger({data:e.dataColumnCount,defaultValue:-1,validate:e=>e>=0});this.dataLength=getInteger({data:e.dataLength,defaultValue:-1,validate:e=>e>=0});this.dataPrep=getStringOption(e.dataPrep,["none","flateCompress"]);this.dataRowCount=getInteger({data:e.dataRowCount,defaultValue:-1,validate:e=>e>=0});this.endChar=e.endChar||"";this.errorCorrectionLevel=getInteger({data:e.errorCorrectionLevel,defaultValue:-1,validate:e=>e>=0&&e<=8});this.id=e.id||"";this.moduleHeight=getMeasurement(e.moduleHeight,"5mm");this.moduleWidth=getMeasurement(e.moduleWidth,"0.25mm");this.printCheckDigit=getInteger({data:e.printCheckDigit,defaultValue:0,validate:e=>1===e});this.rowColumnRatio=getRatio(e.rowColumnRatio);this.startChar=e.startChar||"";this.textLocation=getStringOption(e.textLocation,["below","above","aboveEmbedded","belowEmbedded","none"]);this.truncate=getInteger({data:e.truncate,defaultValue:0,validate:e=>1===e});this.type=getStringOption(e.type?e.type.toLowerCase():"",["aztec","codabar","code2of5industrial","code2of5interleaved","code2of5matrix","code2of5standard","code3of9","code3of9extended","code11","code49","code93","code128","code128a","code128b","code128c","code128sscc","datamatrix","ean8","ean8add2","ean8add5","ean13","ean13add2","ean13add5","ean13pwcd","fim","logmars","maxicode","msi","pdf417","pdf417macro","plessey","postauscust2","postauscust3","postausreplypaid","postausstandard","postukrm4scc","postusdpbc","postusimb","postusstandard","postus5zip","qrcode","rfid","rss14","rss14expanded","rss14limited","rss14stacked","rss14stackedomni","rss14truncated","telepen","ucc128","ucc128random","ucc128sscc","upca","upcaadd2","upcaadd5","upcapwcd","upce","upceadd2","upceadd5","upcean2","upcean5","upsmaxicode"]);this.upsMode=getStringOption(e.upsMode,["usCarrier","internationalCarrier","secureSymbol","standardSymbol"]);this.use=e.use||"";this.usehref=e.usehref||"";this.wideNarrowRatio=getRatio(e.wideNarrowRatio);this.encrypt=null;this.extras=null}}class Bind extends XFAObject{constructor(e){super(Po,"bind",!0);this.match=getStringOption(e.match,["once","dataRef","global","none"]);this.ref=e.ref||"";this.picture=null}}class BindItems extends XFAObject{constructor(e){super(Po,"bindItems");this.connection=e.connection||"";this.labelRef=e.labelRef||"";this.ref=e.ref||"";this.valueRef=e.valueRef||""}}class Bookend extends XFAObject{constructor(e){super(Po,"bookend");this.id=e.id||"";this.leader=e.leader||"";this.trailer=e.trailer||"";this.use=e.use||"";this.usehref=e.usehref||""}}class BooleanElement extends Option01{constructor(e){super(Po,"boolean");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[Js](e){return valueToHtml(1===this[Vn]?"1":"0")}}class Border extends XFAObject{constructor(e){super(Po,"border",!0);this.break=getStringOption(e.break,["close","open"]);this.hand=getStringOption(e.hand,["even","left","right"]);this.id=e.id||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.corner=new XFAObjectArray(4);this.edge=new XFAObjectArray(4);this.extras=null;this.fill=null;this.margin=null}[os](){if(!this[Yn]){const e=this.edge.children.slice();if(e.length<4){const t=e.at(-1)||new Edge({});for(let a=e.length;a<4;a++)e.push(t)}const t=e.map(e=>e.thickness),a=[0,0,0,0];if(this.margin){a[0]=this.margin.topInset;a[1]=this.margin.rightInset;a[2]=this.margin.bottomInset;a[3]=this.margin.leftInset}this[Yn]={widths:t,insets:a,edges:e}}return this[Yn]}[Zs](){const{edges:e}=this[os](),t=e.map(e=>{const t=e[Zs]();t.color||="#000000";return t}),a=Object.create(null);this.margin&&Object.assign(a,this.margin[Zs]());"visible"===this.fill?.presence&&Object.assign(a,this.fill[Zs]());if(this.corner.children.some(e=>0!==e.radius)){const e=this.corner.children.map(e=>e[Zs]());if(2===e.length||3===e.length){const t=e.at(-1);for(let a=e.length;a<4;a++)e.push(t)}a.borderRadius=e.map(e=>e.radius).join(" ")}switch(this.presence){case"invisible":case"hidden":a.borderStyle="";break;case"inactive":a.borderStyle="none";break;default:a.borderStyle=t.map(e=>e.style).join(" ")}a.borderWidth=t.map(e=>e.width).join(" ");a.borderColor=t.map(e=>e.color).join(" ");return a}}class Break extends XFAObject{constructor(e){super(Po,"break",!0);this.after=getStringOption(e.after,["auto","contentArea","pageArea","pageEven","pageOdd"]);this.afterTarget=e.afterTarget||"";this.before=getStringOption(e.before,["auto","contentArea","pageArea","pageEven","pageOdd"]);this.beforeTarget=e.beforeTarget||"";this.bookendLeader=e.bookendLeader||"";this.bookendTrailer=e.bookendTrailer||"";this.id=e.id||"";this.overflowLeader=e.overflowLeader||"";this.overflowTarget=e.overflowTarget||"";this.overflowTrailer=e.overflowTrailer||"";this.startNew=getInteger({data:e.startNew,defaultValue:0,validate:e=>1===e});this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}}class BreakAfter extends XFAObject{constructor(e){super(Po,"breakAfter",!0);this.id=e.id||"";this.leader=e.leader||"";this.startNew=getInteger({data:e.startNew,defaultValue:0,validate:e=>1===e});this.target=e.target||"";this.targetType=getStringOption(e.targetType,["auto","contentArea","pageArea"]);this.trailer=e.trailer||"";this.use=e.use||"";this.usehref=e.usehref||"";this.script=null}}class BreakBefore extends XFAObject{constructor(e){super(Po,"breakBefore",!0);this.id=e.id||"";this.leader=e.leader||"";this.startNew=getInteger({data:e.startNew,defaultValue:0,validate:e=>1===e});this.target=e.target||"";this.targetType=getStringOption(e.targetType,["auto","contentArea","pageArea"]);this.trailer=e.trailer||"";this.use=e.use||"";this.usehref=e.usehref||"";this.script=null}[Js](e){this[Yn]={};return HTMLResult.FAILURE}}class Button extends XFAObject{constructor(e){super(Po,"button",!0);this.highlight=getStringOption(e.highlight,["inverted","none","outline","push"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}[Js](e){const t=this[fs]()[fs](),a={name:"button",attributes:{id:this[Qs],class:["xfaButton"],style:{}},children:[]};for(const e of t.event.children){if("click"!==e.activity||!e.script)continue;const t=recoverJsURL(e.script[Vn]);if(!t)continue;const r=fixURL(t.url);r&&a.children.push({name:"a",attributes:{id:"link"+this[Qs],href:r,newWindow:t.newWindow,class:["xfaLink"],style:{}},children:[]})}return HTMLResult.success(a)}}class Calculate extends XFAObject{constructor(e){super(Po,"calculate",!0);this.id=e.id||"";this.override=getStringOption(e.override,["disabled","error","ignore","warning"]);this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.message=null;this.script=null}}class Caption extends XFAObject{constructor(e){super(Po,"caption",!0);this.id=e.id||"";this.placement=getStringOption(e.placement,["left","bottom","inline","right","top"]);this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.reserve=Math.ceil(getMeasurement(e.reserve));this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.font=null;this.margin=null;this.para=null;this.value=null}[$s](e){_setValue(this,e)}[os](e){if(!this[Yn]){let{width:t,height:a}=e;switch(this.placement){case"left":case"right":case"inline":t=this.reserve<=0?t:this.reserve;break;case"top":case"bottom":a=this.reserve<=0?a:this.reserve}this[Yn]=layoutNode(this,{width:t,height:a})}return this[Yn]}[Js](e){if(!this.value)return HTMLResult.EMPTY;this[Us]();const t=this.value[Js](e).html;if(!t){this[_s]();return HTMLResult.EMPTY}const a=this.reserve;if(this.reserve<=0){const{w:t,h:a}=this[os](e);switch(this.placement){case"left":case"right":case"inline":this.reserve=t;break;case"top":case"bottom":this.reserve=a}}const r=[];"string"==typeof t?r.push({name:"#text",value:t}):r.push(t);const i=toStyle(this,"font","margin","visibility");switch(this.placement){case"left":case"right":this.reserve>0&&(i.width=measureToString(this.reserve));break;case"top":case"bottom":this.reserve>0&&(i.height=measureToString(this.reserve))}setPara(this,null,t);this[_s]();this.reserve=a;return HTMLResult.success({name:"div",attributes:{style:i,class:["xfaCaption"]},children:r})}}class Certificate extends StringObject{constructor(e){super(Po,"certificate");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Certificates extends XFAObject{constructor(e){super(Po,"certificates",!0);this.credentialServerPolicy=getStringOption(e.credentialServerPolicy,["optional","required"]);this.id=e.id||"";this.url=e.url||"";this.urlPolicy=e.urlPolicy||"";this.use=e.use||"";this.usehref=e.usehref||"";this.encryption=null;this.issuers=null;this.keyUsage=null;this.oids=null;this.signing=null;this.subjectDNs=null}}class CheckButton extends XFAObject{constructor(e){super(Po,"checkButton",!0);this.id=e.id||"";this.mark=getStringOption(e.mark,["default","check","circle","cross","diamond","square","star"]);this.shape=getStringOption(e.shape,["square","round"]);this.size=getMeasurement(e.size,"10pt");this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.extras=null;this.margin=null}[Js](e){const t=toStyle(this,"margin"),a=measureToString(this.size);t.width=t.height=a;let r,i,n;const s=this[fs]()[fs](),o=s.items.children.length&&s.items.children[0][Js]().html||[],c={on:(void 0!==o[0]?o[0]:"on").toString(),off:(void 0!==o[1]?o[1]:"off").toString()},l=(s.value?.[Vs]()||"off")===c.on||void 0,h=s[ds](),u=s[Qs];let d;if(h instanceof ExclGroup){n=h[Qs];r="radio";i="xfaRadio";d=h[Kn]?.[Qs]||h[Qs]}else{r="checkbox";i="xfaCheckbox";d=s[Kn]?.[Qs]||s[Qs]}const f={name:"input",attributes:{class:[i],style:t,fieldId:u,dataId:d,type:r,checked:l,xfaOn:c.on,xfaOff:c.off,"aria-label":ariaLabel(s),"aria-required":!1}};n&&(f.attributes.name=n);if(isRequired(s)){f.attributes["aria-required"]=!0;f.attributes.required=!0}return HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[f]})}}class ChoiceList extends XFAObject{constructor(e){super(Po,"choiceList",!0);this.commitOn=getStringOption(e.commitOn,["select","exit"]);this.id=e.id||"";this.open=getStringOption(e.open,["userControl","always","multiSelect","onEntry"]);this.textEntry=getInteger({data:e.textEntry,defaultValue:0,validate:e=>1===e});this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.extras=null;this.margin=null}[Js](e){const t=toStyle(this,"border","margin"),a=this[fs]()[fs](),r={fontSize:`calc(${a.font?.size||10}px * var(--total-scale-factor))`},i=[];if(a.items.children.length>0){const e=a.items;let t=0,n=0;if(2===e.children.length){t=e.children[0].save;n=1-t}const s=e.children[t][Js]().html,o=e.children[n][Js]().html;let c=!1;const l=a.value?.[Vs]()||"";for(let e=0,t=s.length;eMathClamp(parseInt(e.trim(),10),0,255)).map(e=>isNaN(e)?0:e);if(n.length<3)return{r:a,g:r,b:i};[a,r,i]=n;return{r:a,g:r,b:i}}(e.value):"";this.extras=null}[ms](){return!1}[Zs](){return this.value?Util.makeHexColor(this.value.r,this.value.g,this.value.b):null}}class Comb extends XFAObject{constructor(e){super(Po,"comb");this.id=e.id||"";this.numberOfCells=getInteger({data:e.numberOfCells,defaultValue:0,validate:e=>e>=0});this.use=e.use||"";this.usehref=e.usehref||""}}class Connect extends XFAObject{constructor(e){super(Po,"connect",!0);this.connection=e.connection||"";this.id=e.id||"";this.ref=e.ref||"";this.usage=getStringOption(e.usage,["exportAndImport","exportOnly","importOnly"]);this.use=e.use||"";this.usehref=e.usehref||"";this.picture=null}}class ContentArea extends XFAObject{constructor(e){super(Po,"contentArea",!0);this.h=getMeasurement(e.h);this.id=e.id||"";this.name=e.name||"";this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.w=getMeasurement(e.w);this.x=getMeasurement(e.x,"0pt");this.y=getMeasurement(e.y,"0pt");this.desc=null;this.extras=null}[Js](e){const t={left:measureToString(this.x),top:measureToString(this.y),width:measureToString(this.w),height:measureToString(this.h)},a=["xfaContentarea"];isPrintOnly(this)&&a.push("xfaPrintOnly");return HTMLResult.success({name:"div",children:[],attributes:{style:t,class:a,id:this[Qs]}})}}class Corner extends XFAObject{constructor(e){super(Po,"corner",!0);this.id=e.id||"";this.inverted=getInteger({data:e.inverted,defaultValue:0,validate:e=>1===e});this.join=getStringOption(e.join,["square","round"]);this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.radius=getMeasurement(e.radius);this.stroke=getStringOption(e.stroke,["solid","dashDot","dashDotDot","dashed","dotted","embossed","etched","lowered","raised"]);this.thickness=getMeasurement(e.thickness,"0.5pt");this.use=e.use||"";this.usehref=e.usehref||"";this.color=null;this.extras=null}[Zs](){const e=toStyle(this,"visibility");e.radius=measureToString("square"===this.join?0:this.radius);return e}}class DateElement extends ContentObject{constructor(e){super(Po,"date");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[Zn](){const e=this[Vn].trim();this[Vn]=e?new Date(e):null}[Js](e){return valueToHtml(this[Vn]?this[Vn].toString():"")}}class DateTime extends ContentObject{constructor(e){super(Po,"dateTime");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[Zn](){const e=this[Vn].trim();this[Vn]=e?new Date(e):null}[Js](e){return valueToHtml(this[Vn]?this[Vn].toString():"")}}class DateTimeEdit extends XFAObject{constructor(e){super(Po,"dateTimeEdit",!0);this.hScrollPolicy=getStringOption(e.hScrollPolicy,["auto","off","on"]);this.id=e.id||"";this.picker=getStringOption(e.picker,["host","none"]);this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.comb=null;this.extras=null;this.margin=null}[Js](e){const t=toStyle(this,"border","font","margin"),a=this[fs]()[fs](),r={name:"input",attributes:{type:"text",fieldId:a[Qs],dataId:a[Kn]?.[Qs]||a[Qs],class:["xfaTextfield"],style:t,"aria-label":ariaLabel(a),"aria-required":!1}};if(isRequired(a)){r.attributes["aria-required"]=!0;r.attributes.required=!0}return HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[r]})}}class Decimal extends ContentObject{constructor(e){super(Po,"decimal");this.fracDigits=getInteger({data:e.fracDigits,defaultValue:2,validate:e=>!0});this.id=e.id||"";this.leadDigits=getInteger({data:e.leadDigits,defaultValue:-1,validate:e=>!0});this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[Zn](){const e=parseFloat(this[Vn].trim());this[Vn]=isNaN(e)?null:e}[Js](e){return valueToHtml(null!==this[Vn]?this[Vn].toString():"")}}class DefaultUi extends XFAObject{constructor(e){super(Po,"defaultUi",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}}class Desc extends XFAObject{constructor(e){super(Po,"desc",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.boolean=new XFAObjectArray;this.date=new XFAObjectArray;this.dateTime=new XFAObjectArray;this.decimal=new XFAObjectArray;this.exData=new XFAObjectArray;this.float=new XFAObjectArray;this.image=new XFAObjectArray;this.integer=new XFAObjectArray;this.text=new XFAObjectArray;this.time=new XFAObjectArray}}class DigestMethod extends OptionObject{constructor(e){super(Po,"digestMethod",["","SHA1","SHA256","SHA512","RIPEMD160"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||""}}class DigestMethods extends XFAObject{constructor(e){super(Po,"digestMethods",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.digestMethod=new XFAObjectArray}}class Draw extends XFAObject{constructor(e){super(Po,"draw",!0);this.anchorType=getStringOption(e.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","middleRight","topCenter","topRight"]);this.colSpan=getInteger({data:e.colSpan,defaultValue:1,validate:e=>e>=1||-1===e});this.h=e.h?getMeasurement(e.h):"";this.hAlign=getStringOption(e.hAlign,["left","center","justify","justifyAll","radix","right"]);this.id=e.id||"";this.locale=e.locale||"";this.maxH=getMeasurement(e.maxH,"0pt");this.maxW=getMeasurement(e.maxW,"0pt");this.minH=getMeasurement(e.minH,"0pt");this.minW=getMeasurement(e.minW,"0pt");this.name=e.name||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.relevant=getRelevant(e.relevant);this.rotate=getInteger({data:e.rotate,defaultValue:0,validate:e=>e%90==0});this.use=e.use||"";this.usehref=e.usehref||"";this.w=e.w?getMeasurement(e.w):"";this.x=getMeasurement(e.x,"0pt");this.y=getMeasurement(e.y,"0pt");this.assist=null;this.border=null;this.caption=null;this.desc=null;this.extras=null;this.font=null;this.keep=null;this.margin=null;this.para=null;this.traversal=null;this.ui=null;this.value=null;this.setProperty=new XFAObjectArray}[$s](e){_setValue(this,e)}[Js](e){setTabIndex(this);if("hidden"===this.presence||"inactive"===this.presence)return HTMLResult.EMPTY;fixDimensions(this);this[Us]();const t=this.w,a=this.h,{w:r,h:i,isBroken:n}=layoutNode(this,e);if(r&&""===this.w){if(n&&this[ds]()[Fs]()){this[_s]();return HTMLResult.FAILURE}this.w=r}i&&""===this.h&&(this.h=i);setFirstUnsplittable(this);if(!checkDimensions(this,e)){this.w=t;this.h=a;this[_s]();return HTMLResult.FAILURE}unsetFirstUnsplittable(this);const s=toStyle(this,"font","hAlign","dimensions","position","presence","rotate","anchorType","border","margin");setMinMaxDimensions(this,s);if(s.margin){s.padding=s.margin;delete s.margin}const o=["xfaDraw"];this.font&&o.push("xfaFont");isPrintOnly(this)&&o.push("xfaPrintOnly");const c={style:s,id:this[Qs],class:o};this.name&&(c.xfaName=this.name);const l={name:"div",attributes:c,children:[]};applyAssist(this,c);const h=computeBbox(this,l,e),u=this.value?this.value[Js](e).html:null;if(null===u){this.w=t;this.h=a;this[_s]();return HTMLResult.success(createWrapper(this,l),h)}l.children.push(u);setPara(this,s,u);this.w=t;this.h=a;this[_s]();return HTMLResult.success(createWrapper(this,l),h)}}class Edge extends XFAObject{constructor(e){super(Po,"edge",!0);this.cap=getStringOption(e.cap,["square","butt","round"]);this.id=e.id||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.stroke=getStringOption(e.stroke,["solid","dashDot","dashDotDot","dashed","dotted","embossed","etched","lowered","raised"]);this.thickness=getMeasurement(e.thickness,"0.5pt");this.use=e.use||"";this.usehref=e.usehref||"";this.color=null;this.extras=null}[Zs](){const e=toStyle(this,"visibility");Object.assign(e,{linecap:this.cap,width:measureToString(this.thickness),color:this.color?this.color[Zs]():"#000000",style:""});if("visible"!==this.presence)e.style="none";else switch(this.stroke){case"solid":e.style="solid";break;case"dashDot":case"dashDotDot":case"dashed":e.style="dashed";break;case"dotted":e.style="dotted";break;case"embossed":e.style="ridge";break;case"etched":e.style="groove";break;case"lowered":e.style="inset";break;case"raised":e.style="outset"}return e}}class Encoding extends OptionObject{constructor(e){super(Po,"encoding",["adbe.x509.rsa_sha1","adbe.pkcs7.detached","adbe.pkcs7.sha1"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Encodings extends XFAObject{constructor(e){super(Po,"encodings",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.encoding=new XFAObjectArray}}class Encrypt extends XFAObject{constructor(e){super(Po,"encrypt",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.certificate=null}}class EncryptData extends XFAObject{constructor(e){super(Po,"encryptData",!0);this.id=e.id||"";this.operation=getStringOption(e.operation,["encrypt","decrypt"]);this.target=e.target||"";this.use=e.use||"";this.usehref=e.usehref||"";this.filter=null;this.manifest=null}}class Encryption extends XFAObject{constructor(e){super(Po,"encryption",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.certificate=new XFAObjectArray}}class EncryptionMethod extends OptionObject{constructor(e){super(Po,"encryptionMethod",["","AES256-CBC","TRIPLEDES-CBC","AES128-CBC","AES192-CBC"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||""}}class EncryptionMethods extends XFAObject{constructor(e){super(Po,"encryptionMethods",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.encryptionMethod=new XFAObjectArray}}class Event extends XFAObject{constructor(e){super(Po,"event",!0);this.activity=getStringOption(e.activity,["click","change","docClose","docReady","enter","exit","full","indexChange","initialize","mouseDown","mouseEnter","mouseExit","mouseUp","postExecute","postOpen","postPrint","postSave","postSign","postSubmit","preExecute","preOpen","prePrint","preSave","preSign","preSubmit","ready","validationState"]);this.id=e.id||"";this.listen=getStringOption(e.listen,["refOnly","refAndDescendents"]);this.name=e.name||"";this.ref=e.ref||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.encryptData=null;this.execute=null;this.script=null;this.signData=null;this.submit=null}}class ExData extends ContentObject{constructor(e){super(Po,"exData");this.contentType=e.contentType||"";this.href=e.href||"";this.id=e.id||"";this.maxLength=getInteger({data:e.maxLength,defaultValue:-1,validate:e=>e>=-1});this.name=e.name||"";this.rid=e.rid||"";this.transferEncoding=getStringOption(e.transferEncoding,["none","base64","package"]);this.use=e.use||"";this.usehref=e.usehref||""}[Ss](){return"text/html"===this.contentType}[Bs](e){if("text/html"===this.contentType&&e[Ds]===to.xhtml.id){this[Vn]=e;return!0}if("text/xml"===this.contentType){this[Vn]=e;return!0}return!1}[Js](e){return"text/html"===this.contentType&&this[Vn]?this[Vn][Js](e):HTMLResult.EMPTY}}class ExObject extends XFAObject{constructor(e){super(Po,"exObject",!0);this.archive=e.archive||"";this.classId=e.classId||"";this.codeBase=e.codeBase||"";this.codeType=e.codeType||"";this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.boolean=new XFAObjectArray;this.date=new XFAObjectArray;this.dateTime=new XFAObjectArray;this.decimal=new XFAObjectArray;this.exData=new XFAObjectArray;this.exObject=new XFAObjectArray;this.float=new XFAObjectArray;this.image=new XFAObjectArray;this.integer=new XFAObjectArray;this.text=new XFAObjectArray;this.time=new XFAObjectArray}}class ExclGroup extends XFAObject{constructor(e){super(Po,"exclGroup",!0);this.access=getStringOption(e.access,["open","nonInteractive","protected","readOnly"]);this.accessKey=e.accessKey||"";this.anchorType=getStringOption(e.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","middleRight","topCenter","topRight"]);this.colSpan=getInteger({data:e.colSpan,defaultValue:1,validate:e=>e>=1||-1===e});this.h=e.h?getMeasurement(e.h):"";this.hAlign=getStringOption(e.hAlign,["left","center","justify","justifyAll","radix","right"]);this.id=e.id||"";this.layout=getStringOption(e.layout,["position","lr-tb","rl-row","rl-tb","row","table","tb"]);this.maxH=getMeasurement(e.maxH,"0pt");this.maxW=getMeasurement(e.maxW,"0pt");this.minH=getMeasurement(e.minH,"0pt");this.minW=getMeasurement(e.minW,"0pt");this.name=e.name||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.w=e.w?getMeasurement(e.w):"";this.x=getMeasurement(e.x,"0pt");this.y=getMeasurement(e.y,"0pt");this.assist=null;this.bind=null;this.border=null;this.calculate=null;this.caption=null;this.desc=null;this.extras=null;this.margin=null;this.para=null;this.traversal=null;this.validate=null;this.connect=new XFAObjectArray;this.event=new XFAObjectArray;this.field=new XFAObjectArray;this.setProperty=new XFAObjectArray}[xs](){return!0}[ms](){return!0}[$s](e){for(const t of this.field.children){if(!t.value){const e=new Value({});t[Xn](e);t.value=e}t.value[$s](e)}}[Fs](){return this.layout.endsWith("-tb")&&0===this[Yn].attempt&&this[Yn].numberInLine>0||this[fs]()[Fs]()}[vs](){const e=this[ds]();if(!e[vs]())return!1;if(void 0!==this[Yn]._isSplittable)return this[Yn]._isSplittable;if("position"===this.layout||this.layout.includes("row")){this[Yn]._isSplittable=!1;return!1}if(e.layout?.endsWith("-tb")&&0!==e[Yn].numberInLine)return!1;this[Yn]._isSplittable=!0;return!0}[Qn](){return flushHTML(this)}[jn](e,t){addHTML(this,e,t)}[as](){return getAvailableSpace(this)}[Js](e){setTabIndex(this);if("hidden"===this.presence||"inactive"===this.presence||0===this.h||0===this.w)return HTMLResult.EMPTY;fixDimensions(this);const t=[],a={id:this[Qs],class:[]};setAccess(this,a.class);this[Yn]||=Object.create(null);Object.assign(this[Yn],{children:t,attributes:a,attempt:0,line:null,numberInLine:0,availableSpace:{width:Math.min(this.w||1/0,e.width),height:Math.min(this.h||1/0,e.height)},width:0,height:0,prevHeight:0,currentWidth:0});const r=this[vs]();r||setFirstUnsplittable(this);if(!checkDimensions(this,e))return HTMLResult.FAILURE;const i=new Set(["field"]);if(this.layout.includes("row")){const e=this[ds]().columnWidths;if(Array.isArray(e)&&e.length>0){this[Yn].columnWidths=e;this[Yn].currentColumn=0}}const n=toStyle(this,"anchorType","dimensions","position","presence","border","margin","hAlign"),s=["xfaExclgroup"],o=layoutClass(this);o&&s.push(o);isPrintOnly(this)&&s.push("xfaPrintOnly");a.style=n;a.class=s;this.name&&(a.xfaName=this.name);this[Us]();const c="lr-tb"===this.layout||"rl-tb"===this.layout,l=c?2:1;for(;this[Yn].attempte>=1||-1===e});this.h=e.h?getMeasurement(e.h):"";this.hAlign=getStringOption(e.hAlign,["left","center","justify","justifyAll","radix","right"]);this.id=e.id||"";this.locale=e.locale||"";this.maxH=getMeasurement(e.maxH,"0pt");this.maxW=getMeasurement(e.maxW,"0pt");this.minH=getMeasurement(e.minH,"0pt");this.minW=getMeasurement(e.minW,"0pt");this.name=e.name||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.relevant=getRelevant(e.relevant);this.rotate=getInteger({data:e.rotate,defaultValue:0,validate:e=>e%90==0});this.use=e.use||"";this.usehref=e.usehref||"";this.w=e.w?getMeasurement(e.w):"";this.x=getMeasurement(e.x,"0pt");this.y=getMeasurement(e.y,"0pt");this.assist=null;this.bind=null;this.border=null;this.calculate=null;this.caption=null;this.desc=null;this.extras=null;this.font=null;this.format=null;this.items=new XFAObjectArray(2);this.keep=null;this.margin=null;this.para=null;this.traversal=null;this.ui=null;this.validate=null;this.value=null;this.bindItems=new XFAObjectArray;this.connect=new XFAObjectArray;this.event=new XFAObjectArray;this.setProperty=new XFAObjectArray}[xs](){return!0}[$s](e){_setValue(this,e)}[Js](e){setTabIndex(this);if(!this.ui){this.ui=new Ui({});this.ui[ps]=this[ps];this[Xn](this.ui);let e;switch(this.items.children.length){case 0:e=new TextEdit({});this.ui.textEdit=e;break;case 1:e=new CheckButton({});this.ui.checkButton=e;break;case 2:e=new ChoiceList({});this.ui.choiceList=e}this.ui[Xn](e)}if(!this.ui||"hidden"===this.presence||"inactive"===this.presence||0===this.h||0===this.w)return HTMLResult.EMPTY;this.caption&&delete this.caption[Yn];this[Us]();const t=this.caption?this.caption[Js](e).html:null,a=this.w,r=this.h;let i=0,n=0;if(this.margin){i=this.margin.leftInset+this.margin.rightInset;n=this.margin.topInset+this.margin.bottomInset}let s=null;if(""===this.w||""===this.h){let t=null,a=null,r=0,o=0;if(this.ui.checkButton)r=o=this.ui.checkButton.size;else{const{w:t,h:a}=layoutNode(this,e);if(null!==t){r=t;o=a}else o=function fonts_getMetrics(e,t=!1){let a=null;if(e){const t=stripQuotes(e.typeface),r=e[ps].fontFinder.find(t);a=selectFont(e,r)}if(!a)return{lineHeight:12,lineGap:2,lineNoGap:10};const r=e.size||10,i=a.lineHeight?Math.max(t?0:1.2,a.lineHeight):1.2,n=void 0===a.lineGap?.2:a.lineGap;return{lineHeight:i*r,lineGap:n*r,lineNoGap:Math.max(1,i-n)*r}}(this.font,!0).lineNoGap}s=getBorderDims(this.ui[os]());r+=s.w;o+=s.h;if(this.caption){const{w:i,h:n,isBroken:s}=this.caption[os](e);if(s&&this[ds]()[Fs]()){this[_s]();return HTMLResult.FAILURE}t=i;a=n;switch(this.caption.placement){case"left":case"right":case"inline":t+=r;break;case"top":case"bottom":a+=o}}else{t=r;a=o}if(t&&""===this.w){t+=i;this.w=Math.min(this.maxW<=0?1/0:this.maxW,this.minW+1e>=1&&e<=5});this.appearanceFilter=null;this.certificates=null;this.digestMethods=null;this.encodings=null;this.encryptionMethods=null;this.handler=null;this.lockDocument=null;this.mdp=null;this.reasons=null;this.timeStamp=null}}class Float extends ContentObject{constructor(e){super(Po,"float");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[Zn](){const e=parseFloat(this[Vn].trim());this[Vn]=isNaN(e)?null:e}[Js](e){return valueToHtml(null!==this[Vn]?this[Vn].toString():"")}}class template_Font extends XFAObject{constructor(e){super(Po,"font",!0);this.baselineShift=getMeasurement(e.baselineShift);this.fontHorizontalScale=getFloat({data:e.fontHorizontalScale,defaultValue:100,validate:e=>e>=0});this.fontVerticalScale=getFloat({data:e.fontVerticalScale,defaultValue:100,validate:e=>e>=0});this.id=e.id||"";this.kerningMode=getStringOption(e.kerningMode,["none","pair"]);this.letterSpacing=getMeasurement(e.letterSpacing,"0");this.lineThrough=getInteger({data:e.lineThrough,defaultValue:0,validate:e=>1===e||2===e});this.lineThroughPeriod=getStringOption(e.lineThroughPeriod,["all","word"]);this.overline=getInteger({data:e.overline,defaultValue:0,validate:e=>1===e||2===e});this.overlinePeriod=getStringOption(e.overlinePeriod,["all","word"]);this.posture=getStringOption(e.posture,["normal","italic"]);this.size=getMeasurement(e.size,"10pt");this.typeface=e.typeface||"Courier";this.underline=getInteger({data:e.underline,defaultValue:0,validate:e=>1===e||2===e});this.underlinePeriod=getStringOption(e.underlinePeriod,["all","word"]);this.use=e.use||"";this.usehref=e.usehref||"";this.weight=getStringOption(e.weight,["normal","bold"]);this.extras=null;this.fill=null}[Hn](e){super[Hn](e);this[ps].usedTypefaces.add(this.typeface)}[Zs](){const e=toStyle(this,"fill"),t=e.color;if(t)if("#000000"===t)delete e.color;else if(!t.startsWith("#")){e.background=t;e.backgroundClip="text";e.color="transparent"}this.baselineShift&&(e.verticalAlign=measureToString(this.baselineShift));e.fontKerning="none"===this.kerningMode?"none":"normal";e.letterSpacing=measureToString(this.letterSpacing);if(0!==this.lineThrough){e.textDecoration="line-through";2===this.lineThrough&&(e.textDecorationStyle="double")}if(0!==this.overline){e.textDecoration="overline";2===this.overline&&(e.textDecorationStyle="double")}e.fontStyle=this.posture;e.fontSize=measureToString(.99*this.size);setFontFamily(this,this,this[ps].fontFinder,e);if(0!==this.underline){e.textDecoration="underline";2===this.underline&&(e.textDecorationStyle="double")}e.fontWeight=this.weight;return e}}class Format extends XFAObject{constructor(e){super(Po,"format",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.picture=null}}class Handler extends StringObject{constructor(e){super(Po,"handler");this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||""}}class Hyphenation extends XFAObject{constructor(e){super(Po,"hyphenation");this.excludeAllCaps=getInteger({data:e.excludeAllCaps,defaultValue:0,validate:e=>1===e});this.excludeInitialCap=getInteger({data:e.excludeInitialCap,defaultValue:0,validate:e=>1===e});this.hyphenate=getInteger({data:e.hyphenate,defaultValue:0,validate:e=>1===e});this.id=e.id||"";this.pushCharacterCount=getInteger({data:e.pushCharacterCount,defaultValue:3,validate:e=>e>=0});this.remainCharacterCount=getInteger({data:e.remainCharacterCount,defaultValue:3,validate:e=>e>=0});this.use=e.use||"";this.usehref=e.usehref||"";this.wordCharacterCount=getInteger({data:e.wordCharacterCount,defaultValue:7,validate:e=>e>=0})}}class Image extends StringObject{constructor(e){super(Po,"image");this.aspect=getStringOption(e.aspect,["fit","actual","height","none","width"]);this.contentType=e.contentType||"";this.href=e.href||"";this.id=e.id||"";this.name=e.name||"";this.transferEncoding=getStringOption(e.transferEncoding,["base64","none","package"]);this.use=e.use||"";this.usehref=e.usehref||""}[Js](){if(this.contentType&&!_o.has(this.contentType.toLowerCase()))return HTMLResult.EMPTY;let e=this[ps].images?.get(this.href);if(!e&&(this.href||!this[Vn]))return HTMLResult.EMPTY;e||"base64"!==this.transferEncoding||(e=Uint8Array.fromBase64(this[Vn]));if(!e)return HTMLResult.EMPTY;if(!this.contentType){for(const[t,a]of Uo)if(e.length>t.length&&t.every((t,a)=>t===e[a])){this.contentType=a;break}if(!this.contentType)return HTMLResult.EMPTY}const t=new Blob([e],{type:this.contentType});let a;switch(this.aspect){case"fit":case"actual":break;case"height":a={height:"100%",objectFit:"fill"};break;case"none":a={width:"100%",height:"100%",objectFit:"fill"};break;case"width":a={width:"100%",objectFit:"fill"}}const r=this[fs]();return HTMLResult.success({name:"img",attributes:{class:["xfaImage"],style:a,src:URL.createObjectURL(t),alt:r?ariaLabel(r[fs]()):null}})}}class ImageEdit extends XFAObject{constructor(e){super(Po,"imageEdit",!0);this.data=getStringOption(e.data,["link","embed"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.extras=null;this.margin=null}[Js](e){return"embed"===this.data?HTMLResult.success({name:"div",children:[],attributes:{}}):HTMLResult.EMPTY}}class Integer extends ContentObject{constructor(e){super(Po,"integer");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[Zn](){const e=parseInt(this[Vn].trim(),10);this[Vn]=isNaN(e)?null:e}[Js](e){return valueToHtml(null!==this[Vn]?this[Vn].toString():"")}}class Issuers extends XFAObject{constructor(e){super(Po,"issuers",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.certificate=new XFAObjectArray}}class Items extends XFAObject{constructor(e){super(Po,"items",!0);this.id=e.id||"";this.name=e.name||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.ref=e.ref||"";this.save=getInteger({data:e.save,defaultValue:0,validate:e=>1===e});this.use=e.use||"";this.usehref=e.usehref||"";this.boolean=new XFAObjectArray;this.date=new XFAObjectArray;this.dateTime=new XFAObjectArray;this.decimal=new XFAObjectArray;this.exData=new XFAObjectArray;this.float=new XFAObjectArray;this.image=new XFAObjectArray;this.integer=new XFAObjectArray;this.text=new XFAObjectArray;this.time=new XFAObjectArray}[Js](){const e=[];for(const t of this[ls]())e.push(t[Vs]());return HTMLResult.success(e)}}class Keep extends XFAObject{constructor(e){super(Po,"keep",!0);this.id=e.id||"";const t=["none","contentArea","pageArea"];this.intact=getStringOption(e.intact,t);this.next=getStringOption(e.next,t);this.previous=getStringOption(e.previous,t);this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}}class KeyUsage extends XFAObject{constructor(e){super(Po,"keyUsage");const t=["","yes","no"];this.crlSign=getStringOption(e.crlSign,t);this.dataEncipherment=getStringOption(e.dataEncipherment,t);this.decipherOnly=getStringOption(e.decipherOnly,t);this.digitalSignature=getStringOption(e.digitalSignature,t);this.encipherOnly=getStringOption(e.encipherOnly,t);this.id=e.id||"";this.keyAgreement=getStringOption(e.keyAgreement,t);this.keyCertSign=getStringOption(e.keyCertSign,t);this.keyEncipherment=getStringOption(e.keyEncipherment,t);this.nonRepudiation=getStringOption(e.nonRepudiation,t);this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||""}}class Line extends XFAObject{constructor(e){super(Po,"line",!0);this.hand=getStringOption(e.hand,["even","left","right"]);this.id=e.id||"";this.slope=getStringOption(e.slope,["\\","/"]);this.use=e.use||"";this.usehref=e.usehref||"";this.edge=null}[Js](){const e=this[fs]()[fs](),t=this.edge||new Edge({}),a=t[Zs](),r=Object.create(null),i="visible"===t.presence?t.thickness:0;r.strokeWidth=measureToString(i);r.stroke=a.color;let n,s,o,c,l="100%",h="100%";if(e.w<=i){[n,s,o,c]=["50%",0,"50%","100%"];l=r.strokeWidth}else if(e.h<=i){[n,s,o,c]=[0,"50%","100%","50%"];h=r.strokeWidth}else"\\"===this.slope?[n,s,o,c]=[0,0,"100%","100%"]:[n,s,o,c]=[0,"100%","100%",0];const u={name:"svg",children:[{name:"line",attributes:{xmlns:Eo,x1:n,y1:s,x2:o,y2:c,style:r}}],attributes:{xmlns:Eo,width:l,height:h,style:{overflow:"visible"}}};if(hasMargin(e))return HTMLResult.success({name:"div",attributes:{style:{display:"inline",width:"100%",height:"100%"}},children:[u]});u.attributes.style.position="absolute";return HTMLResult.success(u)}}class Linear extends XFAObject{constructor(e){super(Po,"linear",!0);this.id=e.id||"";this.type=getStringOption(e.type,["toRight","toBottom","toLeft","toTop"]);this.use=e.use||"";this.usehref=e.usehref||"";this.color=null;this.extras=null}[Zs](e){e=e?e[Zs]():"#FFFFFF";return`linear-gradient(${this.type.replace(/([RBLT])/," $1").toLowerCase()}, ${e}, ${this.color?this.color[Zs]():"#000000"})`}}class LockDocument extends ContentObject{constructor(e){super(Po,"lockDocument");this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||""}[Zn](){this[Vn]=getStringOption(this[Vn],["auto","0","1"])}}class Manifest extends XFAObject{constructor(e){super(Po,"manifest",!0);this.action=getStringOption(e.action,["include","all","exclude"]);this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.ref=new XFAObjectArray}}class Margin extends XFAObject{constructor(e){super(Po,"margin",!0);this.bottomInset=getMeasurement(e.bottomInset,"0");this.id=e.id||"";this.leftInset=getMeasurement(e.leftInset,"0");this.rightInset=getMeasurement(e.rightInset,"0");this.topInset=getMeasurement(e.topInset,"0");this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}[Zs](){return{margin:measureToString(this.topInset)+" "+measureToString(this.rightInset)+" "+measureToString(this.bottomInset)+" "+measureToString(this.leftInset)}}}class Mdp extends XFAObject{constructor(e){super(Po,"mdp");this.id=e.id||"";this.permissions=getInteger({data:e.permissions,defaultValue:2,validate:e=>1===e||3===e});this.signatureType=getStringOption(e.signatureType,["filler","author"]);this.use=e.use||"";this.usehref=e.usehref||""}}class Medium extends XFAObject{constructor(e){super(Po,"medium");this.id=e.id||"";this.imagingBBox=function getBBox(e){const t=-1;if(!e)return{x:t,y:t,width:t,height:t};const a=e.split(",",4).map(e=>getMeasurement(e.trim(),"-1"));if(a.length<4||a[2]<0||a[3]<0)return{x:t,y:t,width:t,height:t};const[r,i,n,s]=a;return{x:r,y:i,width:n,height:s}}(e.imagingBBox);this.long=getMeasurement(e.long);this.orientation=getStringOption(e.orientation,["portrait","landscape"]);this.short=getMeasurement(e.short);this.stock=e.stock||"";this.trayIn=getStringOption(e.trayIn,["auto","delegate","pageFront"]);this.trayOut=getStringOption(e.trayOut,["auto","delegate"]);this.use=e.use||"";this.usehref=e.usehref||""}}class Message extends XFAObject{constructor(e){super(Po,"message",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.text=new XFAObjectArray}}class NumericEdit extends XFAObject{constructor(e){super(Po,"numericEdit",!0);this.hScrollPolicy=getStringOption(e.hScrollPolicy,["auto","off","on"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.comb=null;this.extras=null;this.margin=null}[Js](e){const t=toStyle(this,"border","font","margin"),a=this[fs]()[fs](),r={name:"input",attributes:{type:"text",fieldId:a[Qs],dataId:a[Kn]?.[Qs]||a[Qs],class:["xfaTextfield"],style:t,"aria-label":ariaLabel(a),"aria-required":!1}};if(isRequired(a)){r.attributes["aria-required"]=!0;r.attributes.required=!0}return HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[r]})}}class Occur extends XFAObject{constructor(e){super(Po,"occur",!0);this.id=e.id||"";this.initial=""!==e.initial?getInteger({data:e.initial,defaultValue:"",validate:e=>!0}):"";this.max=""!==e.max?getInteger({data:e.max,defaultValue:-1,validate:e=>!0}):"";this.min=""!==e.min?getInteger({data:e.min,defaultValue:1,validate:e=>!0}):"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}[Hn](){const e=this[fs](),t=this.min;""===this.min&&(this.min=e instanceof PageArea||e instanceof PageSet?0:1);""===this.max&&(this.max=""===t?e instanceof PageArea||e instanceof PageSet?-1:1:this.min);-1!==this.max&&this.max!0});this.name=e.name||"";this.numbered=getInteger({data:e.numbered,defaultValue:1,validate:e=>!0});this.oddOrEven=getStringOption(e.oddOrEven,["any","even","odd"]);this.pagePosition=getStringOption(e.pagePosition,["any","first","last","only","rest"]);this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.desc=null;this.extras=null;this.medium=null;this.occur=null;this.area=new XFAObjectArray;this.contentArea=new XFAObjectArray;this.draw=new XFAObjectArray;this.exclGroup=new XFAObjectArray;this.field=new XFAObjectArray;this.subform=new XFAObjectArray}[Ts](){if(!this[Yn]){this[Yn]={numberOfUse:0};return!0}return!this.occur||-1===this.occur.max||this[Yn].numberOfUsee.oddOrEven===t&&e.pagePosition===a);if(r)return r;r=this.pageArea.children.find(e=>"any"===e.oddOrEven&&e.pagePosition===a);if(r)return r;r=this.pageArea.children.find(e=>"any"===e.oddOrEven&&"any"===e.pagePosition);return r||this.pageArea.children[0]}}class Para extends XFAObject{constructor(e){super(Po,"para",!0);this.hAlign=getStringOption(e.hAlign,["left","center","justify","justifyAll","radix","right"]);this.id=e.id||"";this.lineHeight=e.lineHeight?getMeasurement(e.lineHeight,"0pt"):"";this.marginLeft=e.marginLeft?getMeasurement(e.marginLeft,"0pt"):"";this.marginRight=e.marginRight?getMeasurement(e.marginRight,"0pt"):"";this.orphans=getInteger({data:e.orphans,defaultValue:0,validate:e=>e>=0});this.preserve=e.preserve||"";this.radixOffset=e.radixOffset?getMeasurement(e.radixOffset,"0pt"):"";this.spaceAbove=e.spaceAbove?getMeasurement(e.spaceAbove,"0pt"):"";this.spaceBelow=e.spaceBelow?getMeasurement(e.spaceBelow,"0pt"):"";this.tabDefault=e.tabDefault?getMeasurement(this.tabDefault):"";this.tabStops=(e.tabStops||"").trim().split(/\s+/).map((e,t)=>t%2==1?getMeasurement(e):e);this.textIndent=e.textIndent?getMeasurement(e.textIndent,"0pt"):"";this.use=e.use||"";this.usehref=e.usehref||"";this.vAlign=getStringOption(e.vAlign,["top","bottom","middle"]);this.widows=getInteger({data:e.widows,defaultValue:0,validate:e=>e>=0});this.hyphenation=null}[Zs](){const e=toStyle(this,"hAlign");""!==this.marginLeft&&(e.paddingLeft=measureToString(this.marginLeft));""!==this.marginRight&&(e.paddingRight=measureToString(this.marginRight));""!==this.spaceAbove&&(e.paddingTop=measureToString(this.spaceAbove));""!==this.spaceBelow&&(e.paddingBottom=measureToString(this.spaceBelow));if(""!==this.textIndent){e.textIndent=measureToString(this.textIndent);fixTextIndent(e)}this.lineHeight>0&&(e.lineHeight=measureToString(this.lineHeight));""!==this.tabDefault&&(e.tabSize=measureToString(this.tabDefault));this.tabStops.length;this.hyphenatation&&Object.assign(e,this.hyphenatation[Zs]());return e}}class PasswordEdit extends XFAObject{constructor(e){super(Po,"passwordEdit",!0);this.hScrollPolicy=getStringOption(e.hScrollPolicy,["auto","off","on"]);this.id=e.id||"";this.passwordChar=e.passwordChar||"*";this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.extras=null;this.margin=null}}class template_Pattern extends XFAObject{constructor(e){super(Po,"pattern",!0);this.id=e.id||"";this.type=getStringOption(e.type,["crossHatch","crossDiagonal","diagonalLeft","diagonalRight","horizontal","vertical"]);this.use=e.use||"";this.usehref=e.usehref||"";this.color=null;this.extras=null}[Zs](e){e=e?e[Zs]():"#FFFFFF";const t=this.color?this.color[Zs]():"#000000",a="repeating-linear-gradient",r=`${e},${e} 5px,${t} 5px,${t} 10px`;switch(this.type){case"crossHatch":return`${a}(to top,${r}) ${a}(to right,${r})`;case"crossDiagonal":return`${a}(45deg,${r}) ${a}(-45deg,${r})`;case"diagonalLeft":return`${a}(45deg,${r})`;case"diagonalRight":return`${a}(-45deg,${r})`;case"horizontal":return`${a}(to top,${r})`;case"vertical":return`${a}(to right,${r})`}return""}}class Picture extends StringObject{constructor(e){super(Po,"picture");this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Proto extends XFAObject{constructor(e){super(Po,"proto",!0);this.appearanceFilter=new XFAObjectArray;this.arc=new XFAObjectArray;this.area=new XFAObjectArray;this.assist=new XFAObjectArray;this.barcode=new XFAObjectArray;this.bindItems=new XFAObjectArray;this.bookend=new XFAObjectArray;this.boolean=new XFAObjectArray;this.border=new XFAObjectArray;this.break=new XFAObjectArray;this.breakAfter=new XFAObjectArray;this.breakBefore=new XFAObjectArray;this.button=new XFAObjectArray;this.calculate=new XFAObjectArray;this.caption=new XFAObjectArray;this.certificate=new XFAObjectArray;this.certificates=new XFAObjectArray;this.checkButton=new XFAObjectArray;this.choiceList=new XFAObjectArray;this.color=new XFAObjectArray;this.comb=new XFAObjectArray;this.connect=new XFAObjectArray;this.contentArea=new XFAObjectArray;this.corner=new XFAObjectArray;this.date=new XFAObjectArray;this.dateTime=new XFAObjectArray;this.dateTimeEdit=new XFAObjectArray;this.decimal=new XFAObjectArray;this.defaultUi=new XFAObjectArray;this.desc=new XFAObjectArray;this.digestMethod=new XFAObjectArray;this.digestMethods=new XFAObjectArray;this.draw=new XFAObjectArray;this.edge=new XFAObjectArray;this.encoding=new XFAObjectArray;this.encodings=new XFAObjectArray;this.encrypt=new XFAObjectArray;this.encryptData=new XFAObjectArray;this.encryption=new XFAObjectArray;this.encryptionMethod=new XFAObjectArray;this.encryptionMethods=new XFAObjectArray;this.event=new XFAObjectArray;this.exData=new XFAObjectArray;this.exObject=new XFAObjectArray;this.exclGroup=new XFAObjectArray;this.execute=new XFAObjectArray;this.extras=new XFAObjectArray;this.field=new XFAObjectArray;this.fill=new XFAObjectArray;this.filter=new XFAObjectArray;this.float=new XFAObjectArray;this.font=new XFAObjectArray;this.format=new XFAObjectArray;this.handler=new XFAObjectArray;this.hyphenation=new XFAObjectArray;this.image=new XFAObjectArray;this.imageEdit=new XFAObjectArray;this.integer=new XFAObjectArray;this.issuers=new XFAObjectArray;this.items=new XFAObjectArray;this.keep=new XFAObjectArray;this.keyUsage=new XFAObjectArray;this.line=new XFAObjectArray;this.linear=new XFAObjectArray;this.lockDocument=new XFAObjectArray;this.manifest=new XFAObjectArray;this.margin=new XFAObjectArray;this.mdp=new XFAObjectArray;this.medium=new XFAObjectArray;this.message=new XFAObjectArray;this.numericEdit=new XFAObjectArray;this.occur=new XFAObjectArray;this.oid=new XFAObjectArray;this.oids=new XFAObjectArray;this.overflow=new XFAObjectArray;this.pageArea=new XFAObjectArray;this.pageSet=new XFAObjectArray;this.para=new XFAObjectArray;this.passwordEdit=new XFAObjectArray;this.pattern=new XFAObjectArray;this.picture=new XFAObjectArray;this.radial=new XFAObjectArray;this.reason=new XFAObjectArray;this.reasons=new XFAObjectArray;this.rectangle=new XFAObjectArray;this.ref=new XFAObjectArray;this.script=new XFAObjectArray;this.setProperty=new XFAObjectArray;this.signData=new XFAObjectArray;this.signature=new XFAObjectArray;this.signing=new XFAObjectArray;this.solid=new XFAObjectArray;this.speak=new XFAObjectArray;this.stipple=new XFAObjectArray;this.subform=new XFAObjectArray;this.subformSet=new XFAObjectArray;this.subjectDN=new XFAObjectArray;this.subjectDNs=new XFAObjectArray;this.submit=new XFAObjectArray;this.text=new XFAObjectArray;this.textEdit=new XFAObjectArray;this.time=new XFAObjectArray;this.timeStamp=new XFAObjectArray;this.toolTip=new XFAObjectArray;this.traversal=new XFAObjectArray;this.traverse=new XFAObjectArray;this.ui=new XFAObjectArray;this.validate=new XFAObjectArray;this.value=new XFAObjectArray;this.variables=new XFAObjectArray}}class Radial extends XFAObject{constructor(e){super(Po,"radial",!0);this.id=e.id||"";this.type=getStringOption(e.type,["toEdge","toCenter"]);this.use=e.use||"";this.usehref=e.usehref||"";this.color=null;this.extras=null}[Zs](e){e=e?e[Zs]():"#FFFFFF";const t=this.color?this.color[Zs]():"#000000";return`radial-gradient(circle at center, ${"toEdge"===this.type?`${e},${t}`:`${t},${e}`})`}}class Reason extends StringObject{constructor(e){super(Po,"reason");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Reasons extends XFAObject{constructor(e){super(Po,"reasons",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.reason=new XFAObjectArray}}class Rectangle extends XFAObject{constructor(e){super(Po,"rectangle",!0);this.hand=getStringOption(e.hand,["even","left","right"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.corner=new XFAObjectArray(4);this.edge=new XFAObjectArray(4);this.fill=null}[Js](){const e=this.edge.children.length?this.edge.children[0]:new Edge({}),t=e[Zs](),a=Object.create(null);"visible"===this.fill?.presence?Object.assign(a,this.fill[Zs]()):a.fill="transparent";a.strokeWidth=measureToString("visible"===e.presence?e.thickness:0);a.stroke=t.color;const r=(this.corner.children.length?this.corner.children[0]:new Corner({}))[Zs](),i={name:"svg",children:[{name:"rect",attributes:{xmlns:Eo,width:"100%",height:"100%",x:0,y:0,rx:r.radius,ry:r.radius,style:a}}],attributes:{xmlns:Eo,style:{overflow:"visible"},width:"100%",height:"100%"}};if(hasMargin(this[fs]()[fs]()))return HTMLResult.success({name:"div",attributes:{style:{display:"inline",width:"100%",height:"100%"}},children:[i]});i.attributes.style.position="absolute";return HTMLResult.success(i)}}class RefElement extends StringObject{constructor(e){super(Po,"ref");this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Script extends StringObject{constructor(e){super(Po,"script");this.binding=e.binding||"";this.contentType=e.contentType||"";this.id=e.id||"";this.name=e.name||"";this.runAt=getStringOption(e.runAt,["client","both","server"]);this.use=e.use||"";this.usehref=e.usehref||""}}class SetProperty extends XFAObject{constructor(e){super(Po,"setProperty");this.connection=e.connection||"";this.ref=e.ref||"";this.target=e.target||""}}class SignData extends XFAObject{constructor(e){super(Po,"signData",!0);this.id=e.id||"";this.operation=getStringOption(e.operation,["sign","clear","verify"]);this.ref=e.ref||"";this.target=e.target||"";this.use=e.use||"";this.usehref=e.usehref||"";this.filter=null;this.manifest=null}}class Signature extends XFAObject{constructor(e){super(Po,"signature",!0);this.id=e.id||"";this.type=getStringOption(e.type,["PDF1.3","PDF1.6"]);this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.extras=null;this.filter=null;this.manifest=null;this.margin=null}}class Signing extends XFAObject{constructor(e){super(Po,"signing",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.certificate=new XFAObjectArray}}class Solid extends XFAObject{constructor(e){super(Po,"solid",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}[Zs](e){return e?e[Zs]():"#FFFFFF"}}class Speak extends StringObject{constructor(e){super(Po,"speak");this.disable=getInteger({data:e.disable,defaultValue:0,validate:e=>1===e});this.id=e.id||"";this.priority=getStringOption(e.priority,["custom","caption","name","toolTip"]);this.rid=e.rid||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Stipple extends XFAObject{constructor(e){super(Po,"stipple",!0);this.id=e.id||"";this.rate=getInteger({data:e.rate,defaultValue:50,validate:e=>e>=0&&e<=100});this.use=e.use||"";this.usehref=e.usehref||"";this.color=null;this.extras=null}[Zs](e){const t=this.rate/100;return Util.makeHexColor(Math.round(e.value.r*(1-t)+this.value.r*t),Math.round(e.value.g*(1-t)+this.value.g*t),Math.round(e.value.b*(1-t)+this.value.b*t))}}class Subform extends XFAObject{constructor(e){super(Po,"subform",!0);this.access=getStringOption(e.access,["open","nonInteractive","protected","readOnly"]);this.allowMacro=getInteger({data:e.allowMacro,defaultValue:0,validate:e=>1===e});this.anchorType=getStringOption(e.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","middleRight","topCenter","topRight"]);this.colSpan=getInteger({data:e.colSpan,defaultValue:1,validate:e=>e>=1||-1===e});this.columnWidths=(e.columnWidths||"").trim().split(/\s+/).map(e=>"-1"===e?-1:getMeasurement(e));this.h=e.h?getMeasurement(e.h):"";this.hAlign=getStringOption(e.hAlign,["left","center","justify","justifyAll","radix","right"]);this.id=e.id||"";this.layout=getStringOption(e.layout,["position","lr-tb","rl-row","rl-tb","row","table","tb"]);this.locale=e.locale||"";this.maxH=getMeasurement(e.maxH,"0pt");this.maxW=getMeasurement(e.maxW,"0pt");this.mergeMode=getStringOption(e.mergeMode,["consumeData","matchTemplate"]);this.minH=getMeasurement(e.minH,"0pt");this.minW=getMeasurement(e.minW,"0pt");this.name=e.name||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.relevant=getRelevant(e.relevant);this.restoreState=getStringOption(e.restoreState,["manual","auto"]);this.scope=getStringOption(e.scope,["name","none"]);this.use=e.use||"";this.usehref=e.usehref||"";this.w=e.w?getMeasurement(e.w):"";this.x=getMeasurement(e.x,"0pt");this.y=getMeasurement(e.y,"0pt");this.assist=null;this.bind=null;this.bookend=null;this.border=null;this.break=null;this.calculate=null;this.desc=null;this.extras=null;this.keep=null;this.margin=null;this.occur=null;this.overflow=null;this.pageSet=null;this.para=null;this.traversal=null;this.validate=null;this.variables=null;this.area=new XFAObjectArray;this.breakAfter=new XFAObjectArray;this.breakBefore=new XFAObjectArray;this.connect=new XFAObjectArray;this.draw=new XFAObjectArray;this.event=new XFAObjectArray;this.exObject=new XFAObjectArray;this.exclGroup=new XFAObjectArray;this.field=new XFAObjectArray;this.proto=new XFAObjectArray;this.setProperty=new XFAObjectArray;this.subform=new XFAObjectArray;this.subformSet=new XFAObjectArray}[ds](){const e=this[fs]();return e instanceof SubformSet?e[ds]():e}[xs](){return!0}[Fs](){return this.layout.endsWith("-tb")&&0===this[Yn].attempt&&this[Yn].numberInLine>0||this[fs]()[Fs]()}*[hs](){yield*getContainedChildren(this)}[Qn](){return flushHTML(this)}[jn](e,t){addHTML(this,e,t)}[as](){return getAvailableSpace(this)}[vs](){const e=this[ds]();if(!e[vs]())return!1;if(void 0!==this[Yn]._isSplittable)return this[Yn]._isSplittable;if("position"===this.layout||this.layout.includes("row")){this[Yn]._isSplittable=!1;return!1}if(this.keep&&"none"!==this.keep.intact){this[Yn]._isSplittable=!1;return!1}if(e.layout?.endsWith("-tb")&&0!==e[Yn].numberInLine)return!1;this[Yn]._isSplittable=!0;return!0}[Js](e){setTabIndex(this);if(this.break){if("auto"!==this.break.after||""!==this.break.afterTarget){const e=new BreakAfter({targetType:this.break.after,target:this.break.afterTarget,startNew:this.break.startNew.toString()});e[ps]=this[ps];this[Xn](e);this.breakAfter.push(e)}if("auto"!==this.break.before||""!==this.break.beforeTarget){const e=new BreakBefore({targetType:this.break.before,target:this.break.beforeTarget,startNew:this.break.startNew.toString()});e[ps]=this[ps];this[Xn](e);this.breakBefore.push(e)}if(""!==this.break.overflowTarget){const e=new Overflow({target:this.break.overflowTarget,leader:this.break.overflowLeader,trailer:this.break.overflowTrailer});e[ps]=this[ps];this[Xn](e);this.overflow.push(e)}this[js](this.break);this.break=null}if("hidden"===this.presence||"inactive"===this.presence)return HTMLResult.EMPTY;(this.breakBefore.children.length>1||this.breakAfter.children.length>1)&&warn("XFA - Several breakBefore or breakAfter in subforms: please file a bug.");if(this.breakBefore.children.length>=1){const e=this.breakBefore.children[0];if(handleBreak(e))return HTMLResult.breakNode(e)}if(this[Yn]?.afterBreakAfter)return HTMLResult.EMPTY;fixDimensions(this);const t=[],a={id:this[Qs],class:[]};setAccess(this,a.class);this[Yn]||=Object.create(null);Object.assign(this[Yn],{children:t,line:null,attributes:a,attempt:0,numberInLine:0,availableSpace:{width:Math.min(this.w||1/0,e.width),height:Math.min(this.h||1/0,e.height)},width:0,height:0,prevHeight:0,currentWidth:0});const r=this[gs](),i=r[Yn].noLayoutFailure,n=this[vs]();n||setFirstUnsplittable(this);if(!checkDimensions(this,e))return HTMLResult.FAILURE;const s=new Set(["area","draw","exclGroup","field","subform","subformSet"]);if(this.layout.includes("row")){const e=this[ds]().columnWidths;if(Array.isArray(e)&&e.length>0){this[Yn].columnWidths=e;this[Yn].currentColumn=0}}const o=toStyle(this,"anchorType","dimensions","position","presence","border","margin","hAlign"),c=["xfaSubform"],l=layoutClass(this);l&&c.push(l);a.style=o;a.class=c;this.name&&(a.xfaName=this.name);if(this.overflow){const t=this.overflow[os]();if(t.addLeader){t.addLeader=!1;handleOverflow(this,t.leader,e)}}this[Us]();const h="lr-tb"===this.layout||"rl-tb"===this.layout,u=h?2:1;for(;this[Yn].attempt=1){const e=this.breakAfter.children[0];if(handleBreak(e)){this[Yn].afterBreakAfter=y;return HTMLResult.breakNode(e)}}delete this[Yn];return y}}class SubformSet extends XFAObject{constructor(e){super(Po,"subformSet",!0);this.id=e.id||"";this.name=e.name||"";this.relation=getStringOption(e.relation,["ordered","choice","unordered"]);this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.bookend=null;this.break=null;this.desc=null;this.extras=null;this.occur=null;this.overflow=null;this.breakAfter=new XFAObjectArray;this.breakBefore=new XFAObjectArray;this.subform=new XFAObjectArray;this.subformSet=new XFAObjectArray}*[hs](){yield*getContainedChildren(this)}[ds](){let e=this[fs]();for(;!(e instanceof Subform);)e=e[fs]();return e}[xs](){return!0}}class SubjectDN extends ContentObject{constructor(e){super(Po,"subjectDN");this.delimiter=e.delimiter||",";this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[Zn](){this[Vn]=new Map(this[Vn].split(this.delimiter).map(e=>{(e=e.split("=",2))[0]=e[0].trim();return e}))}}class SubjectDNs extends XFAObject{constructor(e){super(Po,"subjectDNs",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.subjectDN=new XFAObjectArray}}class Submit extends XFAObject{constructor(e){super(Po,"submit",!0);this.embedPDF=getInteger({data:e.embedPDF,defaultValue:0,validate:e=>1===e});this.format=getStringOption(e.format,["xdp","formdata","pdf","urlencoded","xfd","xml"]);this.id=e.id||"";this.target=e.target||"";this.textEncoding=getKeyword({data:e.textEncoding?e.textEncoding.toLowerCase():"",defaultValue:"",validate:e=>["utf-8","big-five","fontspecific","gbk","gb-18030","gb-2312","ksc-5601","none","shift-jis","ucs-2","utf-16"].includes(e)||e.match(/iso-8859-\d{2}/)});this.use=e.use||"";this.usehref=e.usehref||"";this.xdpContent=e.xdpContent||"";this.encrypt=null;this.encryptData=new XFAObjectArray;this.signData=new XFAObjectArray}}class Template extends XFAObject{constructor(e){super(Po,"template",!0);this.baseProfile=getStringOption(e.baseProfile,["full","interactiveForms"]);this.extras=null;this.subform=new XFAObjectArray}[Zn](){0===this.subform.children.length&&warn("XFA - No subforms in template node.");this.subform.children.length>=2&&warn("XFA - Several subforms in template node: please file a bug.");this[zs]=5e3}[vs](){return!0}[Hs](e,t){return e.startsWith("#")?[this[bs].get(e.slice(1))]:searchNode(this,t,e,!0,!0)}*[Ks](){if(!this.subform.children.length)return HTMLResult.success({name:"div",children:[]});this[Yn]={overflowNode:null,firstUnsplittable:null,currentContentArea:null,currentPageArea:null,noLayoutFailure:!1,pageNumber:1,pagePosition:"first",oddOrEven:"odd",blankOrNotBlank:"nonBlank",paraStack:[]};const e=this.subform.children[0];e.pageSet[Wn]();const t=e.pageSet.pageArea.children,a={name:"div",children:[]};let r=null,i=null,n=null;if(e.breakBefore.children.length>=1){i=e.breakBefore.children[0];n=i.target}else if(e.subform.children.length>=1&&e.subform.children[0].breakBefore.children.length>=1){i=e.subform.children[0].breakBefore.children[0];n=i.target}else if(e.break?.beforeTarget){i=e.break;n=i.beforeTarget}else if(e.subform.children.length>=1&&e.subform.children[0].break?.beforeTarget){i=e.subform.children[0].break;n=i.beforeTarget}if(i){const e=this[Hs](n,i[fs]());if(e instanceof PageArea){r=e;i[Yn]={}}}r||=t[0];r[Yn]={numberOfUse:1};const s=r[fs]();s[Yn]={numberOfUse:1,pageIndex:s.pageArea.children.indexOf(r),pageSetIndex:0};let o,c=null,l=null,h=!0,u=0,d=0;for(;;){if(h)u=0;else{a.children.pop();if(3===++u){warn("XFA - Something goes wrong: please file a bug.");return a}}o=null;this[Yn].currentPageArea=r;const t=r[Js]().html;a.children.push(t);if(c){this[Yn].noLayoutFailure=!0;t.children.push(c[Js](r[Yn].space).html);c=null}if(l){this[Yn].noLayoutFailure=!0;t.children.push(l[Js](r[Yn].space).html);l=null}const i=r.contentArea.children,n=t.children.filter(e=>e.attributes.class.includes("xfaContentarea"));h=!1;this[Yn].firstUnsplittable=null;this[Yn].noLayoutFailure=!1;const flush=t=>{const a=e[Qn]();if(a){h||=a.children?.length>0;n[t].children.push(a)}};for(let t=d,r=i.length;t0;n[t].children.push(u.html)}else!h&&a.children.length>1&&a.children.pop();return a}if(u.isBreak()){const e=u.breakNode;flush(t);if("auto"===e.targetType)continue;if(e.leader){c=this[Hs](e.leader,e[fs]());c=c?c[0]:null}if(e.trailer){l=this[Hs](e.trailer,e[fs]());l=l?l[0]:null}if("pageArea"===e.targetType){o=e[Yn].target;t=1/0}else if(e[Yn].target){o=e[Yn].target;d=e[Yn].index+1;t=1/0}else t=e[Yn].index;continue}if(this[Yn].overflowNode){const e=this[Yn].overflowNode;this[Yn].overflowNode=null;const a=e[os](),r=a.target;a.addLeader=null!==a.leader;a.addTrailer=null!==a.trailer;flush(t);const n=t;t=1/0;if(r instanceof PageArea)o=r;else if(r instanceof ContentArea){const e=i.indexOf(r);if(-1!==e)e>n?t=e-1:d=e;else{o=r[fs]();d=o.contentArea.children.indexOf(r)}}continue}flush(t)}this[Yn].pageNumber+=1;o&&(o[Ts]()?o[Yn].numberOfUse+=1:o=null);r=o||r[us]();yield null}}}class Text extends ContentObject{constructor(e){super(Po,"text");this.id=e.id||"";this.maxChars=getInteger({data:e.maxChars,defaultValue:0,validate:e=>e>=0});this.name=e.name||"";this.rid=e.rid||"";this.use=e.use||"";this.usehref=e.usehref||""}[Un](){return!0}[Bs](e){if(e[Ds]===to.xhtml.id){this[Vn]=e;return!0}warn(`XFA - Invalid content in Text: ${e[Ms]}.`);return!1}[Es](e){this[Vn]instanceof XFAObject||super[Es](e)}[Zn](){"string"==typeof this[Vn]&&(this[Vn]=this[Vn].replaceAll("\r\n","\n"))}[os](){return"string"==typeof this[Vn]?this[Vn].split(/[\u2029\u2028\n]/).filter(e=>!!e).join("\n"):this[Vn][Vs]()}[Js](e){if("string"==typeof this[Vn]){const e=valueToHtml(this[Vn]).html;if(this[Vn].includes("\u2029")){e.name="div";e.children=[];this[Vn].split("\u2029").map(e=>e.split(/[\u2028\n]/).flatMap(e=>[{name:"span",value:e},{name:"br"}])).forEach(t=>{e.children.push({name:"p",children:t})})}else if(/[\u2028\n]/.test(this[Vn])){e.name="div";e.children=[];this[Vn].split(/[\u2028\n]/).forEach(t=>{e.children.push({name:"span",value:t},{name:"br"})})}return HTMLResult.success(e)}return this[Vn][Js](e)}}class TextEdit extends XFAObject{constructor(e){super(Po,"textEdit",!0);this.allowRichText=getInteger({data:e.allowRichText,defaultValue:0,validate:e=>1===e});this.hScrollPolicy=getStringOption(e.hScrollPolicy,["auto","off","on"]);this.id=e.id||"";this.multiLine=getInteger({data:e.multiLine,defaultValue:"",validate:e=>0===e||1===e});this.use=e.use||"";this.usehref=e.usehref||"";this.vScrollPolicy=getStringOption(e.vScrollPolicy,["auto","off","on"]);this.border=null;this.comb=null;this.extras=null;this.margin=null}[Js](e){const t=toStyle(this,"border","font","margin");let a;const r=this[fs]()[fs]();""===this.multiLine&&(this.multiLine=r instanceof Draw?1:0);a=1===this.multiLine?{name:"textarea",attributes:{dataId:r[Kn]?.[Qs]||r[Qs],fieldId:r[Qs],class:["xfaTextfield"],style:t,"aria-label":ariaLabel(r),"aria-required":!1}}:{name:"input",attributes:{type:"text",dataId:r[Kn]?.[Qs]||r[Qs],fieldId:r[Qs],class:["xfaTextfield"],style:t,"aria-label":ariaLabel(r),"aria-required":!1}};if(isRequired(r)){a.attributes["aria-required"]=!0;a.attributes.required=!0}return HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[a]})}}class Time extends StringObject{constructor(e){super(Po,"time");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[Zn](){const e=this[Vn].trim();this[Vn]=e?new Date(e):null}[Js](e){return valueToHtml(this[Vn]?this[Vn].toString():"")}}class TimeStamp extends XFAObject{constructor(e){super(Po,"timeStamp");this.id=e.id||"";this.server=e.server||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||""}}class ToolTip extends StringObject{constructor(e){super(Po,"toolTip");this.id=e.id||"";this.rid=e.rid||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Traversal extends XFAObject{constructor(e){super(Po,"traversal",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.traverse=new XFAObjectArray}}class Traverse extends XFAObject{constructor(e){super(Po,"traverse",!0);this.id=e.id||"";this.operation=getStringOption(e.operation,["next","back","down","first","left","right","up"]);this.ref=e.ref||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.script=null}get name(){return this.operation}[Is](){return!1}}class Ui extends XFAObject{constructor(e){super(Po,"ui",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.picture=null;this.barcode=null;this.button=null;this.checkButton=null;this.choiceList=null;this.dateTimeEdit=null;this.defaultUi=null;this.imageEdit=null;this.numericEdit=null;this.passwordEdit=null;this.signature=null;this.textEdit=null}[os](){if(void 0===this[Yn]){for(const e of Object.getOwnPropertyNames(this)){if("extras"===e||"picture"===e)continue;const t=this[e];if(t instanceof XFAObject){this[Yn]=t;return t}}this[Yn]=null}return this[Yn]}[Js](e){const t=this[os]();return t?t[Js](e):HTMLResult.EMPTY}}class Validate extends XFAObject{constructor(e){super(Po,"validate",!0);this.formatTest=getStringOption(e.formatTest,["warning","disabled","error"]);this.id=e.id||"";this.nullTest=getStringOption(e.nullTest,["disabled","error","warning"]);this.scriptTest=getStringOption(e.scriptTest,["error","disabled","warning"]);this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.message=null;this.picture=null;this.script=null}}class Value extends XFAObject{constructor(e){super(Po,"value",!0);this.id=e.id||"";this.override=getInteger({data:e.override,defaultValue:0,validate:e=>1===e});this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.arc=null;this.boolean=null;this.date=null;this.dateTime=null;this.decimal=null;this.exData=null;this.float=null;this.image=null;this.integer=null;this.line=null;this.rectangle=null;this.text=null;this.time=null}[$s](e){const t=this[fs]();if(t instanceof Field&&t.ui?.imageEdit){if(!this.image){this.image=new Image({});this[Xn](this.image)}this.image[Vn]=e[Vn];return}const a=e[Ms];if(null===this[a]){for(const e of Object.getOwnPropertyNames(this)){const t=this[e];if(t instanceof XFAObject){this[e]=null;this[js](t)}}this[e[Ms]]=e;this[Xn](e)}else this[a][Vn]=e[Vn]}[Vs](){if(this.exData)return"string"==typeof this.exData[Vn]?this.exData[Vn].trim():this.exData[Vn][Vs]().trim();for(const e of Object.getOwnPropertyNames(this)){if("image"===e)continue;const t=this[e];if(t instanceof XFAObject)return(t[Vn]||"").toString().trim()}return null}[Js](e){for(const t of Object.getOwnPropertyNames(this)){const a=this[t];if(a instanceof XFAObject)return a[Js](e)}return HTMLResult.EMPTY}}class Variables extends XFAObject{constructor(e){super(Po,"variables",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.boolean=new XFAObjectArray;this.date=new XFAObjectArray;this.dateTime=new XFAObjectArray;this.decimal=new XFAObjectArray;this.exData=new XFAObjectArray;this.float=new XFAObjectArray;this.image=new XFAObjectArray;this.integer=new XFAObjectArray;this.manifest=new XFAObjectArray;this.script=new XFAObjectArray;this.text=new XFAObjectArray;this.time=new XFAObjectArray}[Is](){return!0}}class TemplateNamespace{static[eo](e,t){if(TemplateNamespace.hasOwnProperty(e)){const a=TemplateNamespace[e](t);a[Gs](t);return a}}static appearanceFilter(e){return new AppearanceFilter(e)}static arc(e){return new Arc(e)}static area(e){return new Area(e)}static assist(e){return new Assist(e)}static barcode(e){return new Barcode(e)}static bind(e){return new Bind(e)}static bindItems(e){return new BindItems(e)}static bookend(e){return new Bookend(e)}static boolean(e){return new BooleanElement(e)}static border(e){return new Border(e)}static break(e){return new Break(e)}static breakAfter(e){return new BreakAfter(e)}static breakBefore(e){return new BreakBefore(e)}static button(e){return new Button(e)}static calculate(e){return new Calculate(e)}static caption(e){return new Caption(e)}static certificate(e){return new Certificate(e)}static certificates(e){return new Certificates(e)}static checkButton(e){return new CheckButton(e)}static choiceList(e){return new ChoiceList(e)}static color(e){return new Color(e)}static comb(e){return new Comb(e)}static connect(e){return new Connect(e)}static contentArea(e){return new ContentArea(e)}static corner(e){return new Corner(e)}static date(e){return new DateElement(e)}static dateTime(e){return new DateTime(e)}static dateTimeEdit(e){return new DateTimeEdit(e)}static decimal(e){return new Decimal(e)}static defaultUi(e){return new DefaultUi(e)}static desc(e){return new Desc(e)}static digestMethod(e){return new DigestMethod(e)}static digestMethods(e){return new DigestMethods(e)}static draw(e){return new Draw(e)}static edge(e){return new Edge(e)}static encoding(e){return new Encoding(e)}static encodings(e){return new Encodings(e)}static encrypt(e){return new Encrypt(e)}static encryptData(e){return new EncryptData(e)}static encryption(e){return new Encryption(e)}static encryptionMethod(e){return new EncryptionMethod(e)}static encryptionMethods(e){return new EncryptionMethods(e)}static event(e){return new Event(e)}static exData(e){return new ExData(e)}static exObject(e){return new ExObject(e)}static exclGroup(e){return new ExclGroup(e)}static execute(e){return new Execute(e)}static extras(e){return new Extras(e)}static field(e){return new Field(e)}static fill(e){return new Fill(e)}static filter(e){return new Filter(e)}static float(e){return new Float(e)}static font(e){return new template_Font(e)}static format(e){return new Format(e)}static handler(e){return new Handler(e)}static hyphenation(e){return new Hyphenation(e)}static image(e){return new Image(e)}static imageEdit(e){return new ImageEdit(e)}static integer(e){return new Integer(e)}static issuers(e){return new Issuers(e)}static items(e){return new Items(e)}static keep(e){return new Keep(e)}static keyUsage(e){return new KeyUsage(e)}static line(e){return new Line(e)}static linear(e){return new Linear(e)}static lockDocument(e){return new LockDocument(e)}static manifest(e){return new Manifest(e)}static margin(e){return new Margin(e)}static mdp(e){return new Mdp(e)}static medium(e){return new Medium(e)}static message(e){return new Message(e)}static numericEdit(e){return new NumericEdit(e)}static occur(e){return new Occur(e)}static oid(e){return new Oid(e)}static oids(e){return new Oids(e)}static overflow(e){return new Overflow(e)}static pageArea(e){return new PageArea(e)}static pageSet(e){return new PageSet(e)}static para(e){return new Para(e)}static passwordEdit(e){return new PasswordEdit(e)}static pattern(e){return new template_Pattern(e)}static picture(e){return new Picture(e)}static proto(e){return new Proto(e)}static radial(e){return new Radial(e)}static reason(e){return new Reason(e)}static reasons(e){return new Reasons(e)}static rectangle(e){return new Rectangle(e)}static ref(e){return new RefElement(e)}static script(e){return new Script(e)}static setProperty(e){return new SetProperty(e)}static signData(e){return new SignData(e)}static signature(e){return new Signature(e)}static signing(e){return new Signing(e)}static solid(e){return new Solid(e)}static speak(e){return new Speak(e)}static stipple(e){return new Stipple(e)}static subform(e){return new Subform(e)}static subformSet(e){return new SubformSet(e)}static subjectDN(e){return new SubjectDN(e)}static subjectDNs(e){return new SubjectDNs(e)}static submit(e){return new Submit(e)}static template(e){return new Template(e)}static text(e){return new Text(e)}static textEdit(e){return new TextEdit(e)}static time(e){return new Time(e)}static timeStamp(e){return new TimeStamp(e)}static toolTip(e){return new ToolTip(e)}static traversal(e){return new Traversal(e)}static traverse(e){return new Traverse(e)}static ui(e){return new Ui(e)}static validate(e){return new Validate(e)}static value(e){return new Value(e)}static variables(e){return new Variables(e)}}const jo=to.datasets.id;function createText(e){const t=new Text({});t[Vn]=e;return t}class Binder{constructor(e){this.root=e;this.datasets=e.datasets;this.data=e.datasets?.data||new XmlObject(to.datasets.id,"data");this.emptyMerge=0===this.data[ls]().length;this.root.form=this.form=e.template[$n]()}_isConsumeData(){return!this.emptyMerge&&this._mergeMode}_isMatchTemplate(){return!this._isConsumeData()}bind(){this._bindElement(this.form,this.data);return this.form}getData(){return this.data}_bindValue(e,t,a){e[Kn]=t;if(e[ms]())if(t[As]()){const a=t[ss]();e[$s](createText(a))}else if(e instanceof Field&&"multiSelect"===e.ui?.choiceList?.open){const a=t[ls]().map(e=>e[Vn].trim()).join("\n");e[$s](createText(a))}else this._isConsumeData()&&warn("XFA - Nodes haven't the same type.");else!t[As]()||this._isMatchTemplate()?this._bindElement(e,t):warn("XFA - Nodes haven't the same type.")}_findDataByNameToConsume(e,t,a,r){if(!e)return null;let i,n;for(let r=0;r<3;r++){i=a[cs](e,!1,!0);for(;;){n=i.next().value;if(!n)break;if(t===n[As]())return n}if(a[Ds]===to.datasets.id&&"data"===a[Ms])break;a=a[fs]()}if(!r)return null;i=this.data[cs](e,!0,!1);n=i.next().value;if(n)return n;i=this.data[es](e,!0);n=i.next().value;return n?.[As]()?n:null}_setProperties(e,t){if(e.hasOwnProperty("setProperty"))for(const{ref:a,target:r,connection:i}of e.setProperty.children){if(i)continue;if(!a)continue;const n=searchNode(this.root,t,a,!1,!1);if(!n){warn(`XFA - Invalid reference: ${a}.`);continue}const[s]=n;if(!s[ks](this.data)){warn("XFA - Invalid node: must be a data node.");continue}const o=searchNode(this.root,e,r,!1,!1);if(!o){warn(`XFA - Invalid target: ${r}.`);continue}const[c]=o;if(!c[ks](e)){warn("XFA - Invalid target: must be a property or subproperty.");continue}const l=c[fs]();if(c instanceof SetProperty||l instanceof SetProperty){warn("XFA - Invalid target: cannot be a setProperty or one of its properties.");continue}if(c instanceof BindItems||l instanceof BindItems){warn("XFA - Invalid target: cannot be a bindItems or one of its properties.");continue}const h=s[Vs](),u=c[Ms];if(c instanceof XFAAttribute){const e=Object.create(null);e[u]=h;const t=Reflect.construct(Object.getPrototypeOf(l).constructor,[e]);l[u]=t[u];continue}if(c.hasOwnProperty(Vn)){c[Kn]=s;c[Vn]=h;c[Zn]()}else warn("XFA - Invalid node to use in setProperty")}}_bindItems(e,t){if(!e.hasOwnProperty("items")||!e.hasOwnProperty("bindItems")||e.bindItems.isEmpty())return;for(const t of e.items.children)e[js](t);e.items.clear();const a=new Items({}),r=new Items({});e[Xn](a);e.items.push(a);e[Xn](r);e.items.push(r);for(const{ref:i,labelRef:n,valueRef:s,connection:o}of e.bindItems.children){if(o)continue;if(!i)continue;const e=searchNode(this.root,t,i,!1,!1);if(e)for(const t of e){if(!t[ks](this.datasets)){warn(`XFA - Invalid ref (${i}): must be a datasets child.`);continue}const e=searchNode(this.root,t,n,!0,!1);if(!e){warn(`XFA - Invalid label: ${n}.`);continue}const[o]=e;if(!o[ks](this.datasets)){warn("XFA - Invalid label: must be a datasets child.");continue}const c=searchNode(this.root,t,s,!0,!1);if(!c){warn(`XFA - Invalid value: ${s}.`);continue}const[l]=c;if(!l[ks](this.datasets)){warn("XFA - Invalid value: must be a datasets child.");continue}const h=createText(o[Vs]()),u=createText(l[Vs]());a[Xn](h);a.text.push(h);r[Xn](u);r.text.push(u)}else warn(`XFA - Invalid reference: ${i}.`)}}_bindOccurrences(e,t,a){let r;if(t.length>1){r=e[$n]();r[js](r.occur);r.occur=null}this._bindValue(e,t[0],a);this._setProperties(e,t[0]);this._bindItems(e,t[0]);if(1===t.length)return;const i=e[fs](),n=e[Ms],s=i[ys](e);for(let e=1,o=t.length;et.name===e.name).length:a[r].children.length;const n=a[ys](e)+1,s=t.initial-i;if(s){const t=e[$n]();t[js](t.occur);t.occur=null;a[r].push(t);a[ws](n,t);for(let e=1;e0)this._bindOccurrences(r,[e[0]],null);else if(this.emptyMerge){const e=t[Ds]===jo?-1:t[Ds],a=r[Kn]=new XmlObject(e,r.name||"root");t[Xn](a);this._bindElement(r,a)}continue}if(!r[xs]())continue;let e=!1,i=null,n=null,s=null;if(r.bind){switch(r.bind.match){case"none":this._setAndBind(r,t);continue;case"global":e=!0;break;case"dataRef":if(!r.bind.ref){warn(`XFA - ref is empty in node ${r[Ms]}.`);this._setAndBind(r,t);continue}n=r.bind.ref}r.bind.picture&&(i=r.bind.picture[Vn])}const[o,c]=this._getOccurInfo(r);if(n){s=searchNode(this.root,t,n,!0,!1);if(null===s){s=createDataNode(this.data,t,n);if(!s)continue;this._isConsumeData()&&(s[zn]=!0);this._setAndBind(r,s);continue}this._isConsumeData()&&(s=s.filter(e=>!e[zn]));s.length>c?s=s.slice(0,c):0===s.length&&(s=null);s&&this._isConsumeData()&&s.forEach(e=>{e[zn]=!0})}else{if(!r.name){this._setAndBind(r,t);continue}if(this._isConsumeData()){const a=[];for(;a.length0?a:null}else{s=t[cs](r.name,!1,this.emptyMerge).next().value;if(!s){if(0===o){a.push(r);continue}const e=t[Ds]===jo?-1:t[Ds];s=r[Kn]=new XmlObject(e,r.name);this.emptyMerge&&(s[zn]=!0);t[Xn](s);this._setAndBind(r,s);continue}this.emptyMerge&&(s[zn]=!0);s=[s]}}s?this._bindOccurrences(r,s,i):o>0?this._setAndBind(r,t):a.push(r)}a.forEach(e=>e[fs]()[js](e))}}class DataHandler{constructor(e,t){this.data=t;this.dataset=e.datasets||null}serialize(e){const t=[[-1,this.data[ls]()]];for(;t.length>0;){const a=t.at(-1),[r,i]=a;if(r+1===i.length){t.pop();continue}const n=i[++a[0]],s=e.get(n[Qs]);if(s)n[$s](s);else{const t=n[ts]();for(const a of t.values()){const t=e.get(a[Qs]);if(t){a[$s](t);break}}}const o=n[ls]();o.length>0&&t.push([-1,o])}const a=[''];if(this.dataset)for(const e of this.dataset[ls]())"data"!==e[Ms]&&e[Ys](a);this.data[Ys](a);a.push("");return a.join("")}}const Xo=to.config.id;class Acrobat extends XFAObject{constructor(e){super(Xo,"acrobat",!0);this.acrobat7=null;this.autoSave=null;this.common=null;this.validate=null;this.validateApprovalSignatures=null;this.submitUrl=new XFAObjectArray}}class Acrobat7 extends XFAObject{constructor(e){super(Xo,"acrobat7",!0);this.dynamicRender=null}}class ADBE_JSConsole extends OptionObject{constructor(e){super(Xo,"ADBE_JSConsole",["delegate","Enable","Disable"])}}class ADBE_JSDebugger extends OptionObject{constructor(e){super(Xo,"ADBE_JSDebugger",["delegate","Enable","Disable"])}}class AddSilentPrint extends Option01{constructor(e){super(Xo,"addSilentPrint")}}class AddViewerPreferences extends Option01{constructor(e){super(Xo,"addViewerPreferences")}}class AdjustData extends Option10{constructor(e){super(Xo,"adjustData")}}class AdobeExtensionLevel extends IntegerObject{constructor(e){super(Xo,"adobeExtensionLevel",0,e=>e>=1&&e<=8)}}class Agent extends XFAObject{constructor(e){super(Xo,"agent",!0);this.name=e.name?e.name.trim():"";this.common=new XFAObjectArray}}class AlwaysEmbed extends ContentObject{constructor(e){super(Xo,"alwaysEmbed")}}class Amd extends StringObject{constructor(e){super(Xo,"amd")}}class config_Area extends XFAObject{constructor(e){super(Xo,"area");this.level=getInteger({data:e.level,defaultValue:0,validate:e=>e>=1&&e<=3});this.name=getStringOption(e.name,["","barcode","coreinit","deviceDriver","font","general","layout","merge","script","signature","sourceSet","templateCache"])}}class Attributes extends OptionObject{constructor(e){super(Xo,"attributes",["preserve","delegate","ignore"])}}class AutoSave extends OptionObject{constructor(e){super(Xo,"autoSave",["disabled","enabled"])}}class Base extends StringObject{constructor(e){super(Xo,"base")}}class BatchOutput extends XFAObject{constructor(e){super(Xo,"batchOutput");this.format=getStringOption(e.format,["none","concat","zip","zipCompress"])}}class BehaviorOverride extends ContentObject{constructor(e){super(Xo,"behaviorOverride")}[Zn](){this[Vn]=new Map(this[Vn].trim().split(/\s+/).filter(e=>e.includes(":")).map(e=>e.split(":",2)))}}class Cache extends XFAObject{constructor(e){super(Xo,"cache",!0);this.templateCache=null}}class Change extends Option01{constructor(e){super(Xo,"change")}}class Common extends XFAObject{constructor(e){super(Xo,"common",!0);this.data=null;this.locale=null;this.localeSet=null;this.messaging=null;this.suppressBanner=null;this.template=null;this.validationMessaging=null;this.versionControl=null;this.log=new XFAObjectArray}}class Compress extends XFAObject{constructor(e){super(Xo,"compress");this.scope=getStringOption(e.scope,["imageOnly","document"])}}class CompressLogicalStructure extends Option01{constructor(e){super(Xo,"compressLogicalStructure")}}class CompressObjectStream extends Option10{constructor(e){super(Xo,"compressObjectStream")}}class Compression extends XFAObject{constructor(e){super(Xo,"compression",!0);this.compressLogicalStructure=null;this.compressObjectStream=null;this.level=null;this.type=null}}class Config extends XFAObject{constructor(e){super(Xo,"config",!0);this.acrobat=null;this.present=null;this.trace=null;this.agent=new XFAObjectArray}}class Conformance extends OptionObject{constructor(e){super(Xo,"conformance",["A","B"])}}class ContentCopy extends Option01{constructor(e){super(Xo,"contentCopy")}}class Copies extends IntegerObject{constructor(e){super(Xo,"copies",1,e=>e>=1)}}class Creator extends StringObject{constructor(e){super(Xo,"creator")}}class CurrentPage extends IntegerObject{constructor(e){super(Xo,"currentPage",0,e=>e>=0)}}class Data extends XFAObject{constructor(e){super(Xo,"data",!0);this.adjustData=null;this.attributes=null;this.incrementalLoad=null;this.outputXSL=null;this.range=null;this.record=null;this.startNode=null;this.uri=null;this.window=null;this.xsl=null;this.excludeNS=new XFAObjectArray;this.transform=new XFAObjectArray}}class Debug extends XFAObject{constructor(e){super(Xo,"debug",!0);this.uri=null}}class DefaultTypeface extends ContentObject{constructor(e){super(Xo,"defaultTypeface");this.writingScript=getStringOption(e.writingScript,["*","Arabic","Cyrillic","EastEuropeanRoman","Greek","Hebrew","Japanese","Korean","Roman","SimplifiedChinese","Thai","TraditionalChinese","Vietnamese"])}}class Destination extends OptionObject{constructor(e){super(Xo,"destination",["pdf","pcl","ps","webClient","zpl"])}}class DocumentAssembly extends Option01{constructor(e){super(Xo,"documentAssembly")}}class Driver extends XFAObject{constructor(e){super(Xo,"driver",!0);this.name=e.name?e.name.trim():"";this.fontInfo=null;this.xdc=null}}class DuplexOption extends OptionObject{constructor(e){super(Xo,"duplexOption",["simplex","duplexFlipLongEdge","duplexFlipShortEdge"])}}class DynamicRender extends OptionObject{constructor(e){super(Xo,"dynamicRender",["forbidden","required"])}}class Embed extends Option01{constructor(e){super(Xo,"embed")}}class config_Encrypt extends Option01{constructor(e){super(Xo,"encrypt")}}class config_Encryption extends XFAObject{constructor(e){super(Xo,"encryption",!0);this.encrypt=null;this.encryptionLevel=null;this.permissions=null}}class EncryptionLevel extends OptionObject{constructor(e){super(Xo,"encryptionLevel",["40bit","128bit"])}}class Enforce extends StringObject{constructor(e){super(Xo,"enforce")}}class Equate extends XFAObject{constructor(e){super(Xo,"equate");this.force=getInteger({data:e.force,defaultValue:1,validate:e=>0===e});this.from=e.from||"";this.to=e.to||""}}class EquateRange extends XFAObject{constructor(e){super(Xo,"equateRange");this.from=e.from||"";this.to=e.to||"";this._unicodeRange=e.unicodeRange||""}get unicodeRange(){const e=[],t=/U\+([0-9a-fA-F]+)/,a=this._unicodeRange;for(let r of a.split(",").map(e=>e.trim()).filter(e=>!!e)){r=r.split("-",2).map(e=>{const a=e.match(t);return a?parseInt(a[1],16):0});1===r.length&&r.push(r[0]);e.push(r)}return shadow(this,"unicodeRange",e)}}class Exclude extends ContentObject{constructor(e){super(Xo,"exclude")}[Zn](){this[Vn]=this[Vn].trim().split(/\s+/).filter(e=>e&&["calculate","close","enter","exit","initialize","ready","validate"].includes(e))}}class ExcludeNS extends StringObject{constructor(e){super(Xo,"excludeNS")}}class FlipLabel extends OptionObject{constructor(e){super(Xo,"flipLabel",["usePrinterSetting","on","off"])}}class config_FontInfo extends XFAObject{constructor(e){super(Xo,"fontInfo",!0);this.embed=null;this.map=null;this.subsetBelow=null;this.alwaysEmbed=new XFAObjectArray;this.defaultTypeface=new XFAObjectArray;this.neverEmbed=new XFAObjectArray}}class FormFieldFilling extends Option01{constructor(e){super(Xo,"formFieldFilling")}}class GroupParent extends StringObject{constructor(e){super(Xo,"groupParent")}}class IfEmpty extends OptionObject{constructor(e){super(Xo,"ifEmpty",["dataValue","dataGroup","ignore","remove"])}}class IncludeXDPContent extends StringObject{constructor(e){super(Xo,"includeXDPContent")}}class IncrementalLoad extends OptionObject{constructor(e){super(Xo,"incrementalLoad",["none","forwardOnly"])}}class IncrementalMerge extends Option01{constructor(e){super(Xo,"incrementalMerge")}}class Interactive extends Option01{constructor(e){super(Xo,"interactive")}}class Jog extends OptionObject{constructor(e){super(Xo,"jog",["usePrinterSetting","none","pageSet"])}}class LabelPrinter extends XFAObject{constructor(e){super(Xo,"labelPrinter",!0);this.name=getStringOption(e.name,["zpl","dpl","ipl","tcpl"]);this.batchOutput=null;this.flipLabel=null;this.fontInfo=null;this.xdc=null}}class Layout extends OptionObject{constructor(e){super(Xo,"layout",["paginate","panel"])}}class Level extends IntegerObject{constructor(e){super(Xo,"level",0,e=>e>0)}}class Linearized extends Option01{constructor(e){super(Xo,"linearized")}}class Locale extends StringObject{constructor(e){super(Xo,"locale")}}class LocaleSet extends StringObject{constructor(e){super(Xo,"localeSet")}}class Log extends XFAObject{constructor(e){super(Xo,"log",!0);this.mode=null;this.threshold=null;this.to=null;this.uri=null}}class MapElement extends XFAObject{constructor(e){super(Xo,"map",!0);this.equate=new XFAObjectArray;this.equateRange=new XFAObjectArray}}class MediumInfo extends XFAObject{constructor(e){super(Xo,"mediumInfo",!0);this.map=null}}class config_Message extends XFAObject{constructor(e){super(Xo,"message",!0);this.msgId=null;this.severity=null}}class Messaging extends XFAObject{constructor(e){super(Xo,"messaging",!0);this.message=new XFAObjectArray}}class Mode extends OptionObject{constructor(e){super(Xo,"mode",["append","overwrite"])}}class ModifyAnnots extends Option01{constructor(e){super(Xo,"modifyAnnots")}}class MsgId extends IntegerObject{constructor(e){super(Xo,"msgId",1,e=>e>=1)}}class NameAttr extends StringObject{constructor(e){super(Xo,"nameAttr")}}class NeverEmbed extends ContentObject{constructor(e){super(Xo,"neverEmbed")}}class NumberOfCopies extends IntegerObject{constructor(e){super(Xo,"numberOfCopies",null,e=>e>=2&&e<=5)}}class OpenAction extends XFAObject{constructor(e){super(Xo,"openAction",!0);this.destination=null}}class Output extends XFAObject{constructor(e){super(Xo,"output",!0);this.to=null;this.type=null;this.uri=null}}class OutputBin extends StringObject{constructor(e){super(Xo,"outputBin")}}class OutputXSL extends XFAObject{constructor(e){super(Xo,"outputXSL",!0);this.uri=null}}class Overprint extends OptionObject{constructor(e){super(Xo,"overprint",["none","both","draw","field"])}}class Packets extends StringObject{constructor(e){super(Xo,"packets")}[Zn](){"*"!==this[Vn]&&(this[Vn]=this[Vn].trim().split(/\s+/).filter(e=>["config","datasets","template","xfdf","xslt"].includes(e)))}}class PageOffset extends XFAObject{constructor(e){super(Xo,"pageOffset");this.x=getInteger({data:e.x,defaultValue:"useXDCSetting",validate:e=>!0});this.y=getInteger({data:e.y,defaultValue:"useXDCSetting",validate:e=>!0})}}class PageRange extends StringObject{constructor(e){super(Xo,"pageRange")}[Zn](){const e=this[Vn].trim().split(/\s+/).map(e=>parseInt(e,10)),t=[];for(let a=0,r=e.length;a!1)}}class Pcl extends XFAObject{constructor(e){super(Xo,"pcl",!0);this.name=e.name||"";this.batchOutput=null;this.fontInfo=null;this.jog=null;this.mediumInfo=null;this.outputBin=null;this.pageOffset=null;this.staple=null;this.xdc=null}}class Pdf extends XFAObject{constructor(e){super(Xo,"pdf",!0);this.name=e.name||"";this.adobeExtensionLevel=null;this.batchOutput=null;this.compression=null;this.creator=null;this.encryption=null;this.fontInfo=null;this.interactive=null;this.linearized=null;this.openAction=null;this.pdfa=null;this.producer=null;this.renderPolicy=null;this.scriptModel=null;this.silentPrint=null;this.submitFormat=null;this.tagged=null;this.version=null;this.viewerPreferences=null;this.xdc=null}}class Pdfa extends XFAObject{constructor(e){super(Xo,"pdfa",!0);this.amd=null;this.conformance=null;this.includeXDPContent=null;this.part=null}}class Permissions extends XFAObject{constructor(e){super(Xo,"permissions",!0);this.accessibleContent=null;this.change=null;this.contentCopy=null;this.documentAssembly=null;this.formFieldFilling=null;this.modifyAnnots=null;this.plaintextMetadata=null;this.print=null;this.printHighQuality=null}}class PickTrayByPDFSize extends Option01{constructor(e){super(Xo,"pickTrayByPDFSize")}}class config_Picture extends StringObject{constructor(e){super(Xo,"picture")}}class PlaintextMetadata extends Option01{constructor(e){super(Xo,"plaintextMetadata")}}class Presence extends OptionObject{constructor(e){super(Xo,"presence",["preserve","dissolve","dissolveStructure","ignore","remove"])}}class Present extends XFAObject{constructor(e){super(Xo,"present",!0);this.behaviorOverride=null;this.cache=null;this.common=null;this.copies=null;this.destination=null;this.incrementalMerge=null;this.layout=null;this.output=null;this.overprint=null;this.pagination=null;this.paginationOverride=null;this.script=null;this.validate=null;this.xdp=null;this.driver=new XFAObjectArray;this.labelPrinter=new XFAObjectArray;this.pcl=new XFAObjectArray;this.pdf=new XFAObjectArray;this.ps=new XFAObjectArray;this.submitUrl=new XFAObjectArray;this.webClient=new XFAObjectArray;this.zpl=new XFAObjectArray}}class Print extends Option01{constructor(e){super(Xo,"print")}}class PrintHighQuality extends Option01{constructor(e){super(Xo,"printHighQuality")}}class PrintScaling extends OptionObject{constructor(e){super(Xo,"printScaling",["appdefault","noScaling"])}}class PrinterName extends StringObject{constructor(e){super(Xo,"printerName")}}class Producer extends StringObject{constructor(e){super(Xo,"producer")}}class Ps extends XFAObject{constructor(e){super(Xo,"ps",!0);this.name=e.name||"";this.batchOutput=null;this.fontInfo=null;this.jog=null;this.mediumInfo=null;this.outputBin=null;this.staple=null;this.xdc=null}}class Range extends ContentObject{constructor(e){super(Xo,"range")}[Zn](){this[Vn]=this[Vn].split(",",2).map(e=>e.split("-").map(e=>parseInt(e.trim(),10))).filter(e=>e.every(e=>!isNaN(e))).map(e=>{1===e.length&&e.push(e[0]);return e})}}class Record extends ContentObject{constructor(e){super(Xo,"record")}[Zn](){this[Vn]=this[Vn].trim();const e=parseInt(this[Vn],10);!isNaN(e)&&e>=0&&(this[Vn]=e)}}class Relevant extends ContentObject{constructor(e){super(Xo,"relevant")}[Zn](){this[Vn]=this[Vn].trim().split(/\s+/)}}class Rename extends ContentObject{constructor(e){super(Xo,"rename")}[Zn](){this[Vn]=this[Vn].trim();(this[Vn].toLowerCase().startsWith("xml")||new RegExp("[\\p{L}_][\\p{L}\\d._\\p{M}-]*","u").test(this[Vn]))&&warn("XFA - Rename: invalid XFA name")}}class RenderPolicy extends OptionObject{constructor(e){super(Xo,"renderPolicy",["server","client"])}}class RunScripts extends OptionObject{constructor(e){super(Xo,"runScripts",["both","client","none","server"])}}class config_Script extends XFAObject{constructor(e){super(Xo,"script",!0);this.currentPage=null;this.exclude=null;this.runScripts=null}}class ScriptModel extends OptionObject{constructor(e){super(Xo,"scriptModel",["XFA","none"])}}class Severity extends OptionObject{constructor(e){super(Xo,"severity",["ignore","error","information","trace","warning"])}}class SilentPrint extends XFAObject{constructor(e){super(Xo,"silentPrint",!0);this.addSilentPrint=null;this.printerName=null}}class Staple extends XFAObject{constructor(e){super(Xo,"staple");this.mode=getStringOption(e.mode,["usePrinterSetting","on","off"])}}class StartNode extends StringObject{constructor(e){super(Xo,"startNode")}}class StartPage extends IntegerObject{constructor(e){super(Xo,"startPage",0,e=>!0)}}class SubmitFormat extends OptionObject{constructor(e){super(Xo,"submitFormat",["html","delegate","fdf","xml","pdf"])}}class SubmitUrl extends StringObject{constructor(e){super(Xo,"submitUrl")}}class SubsetBelow extends IntegerObject{constructor(e){super(Xo,"subsetBelow",100,e=>e>=0&&e<=100)}}class SuppressBanner extends Option01{constructor(e){super(Xo,"suppressBanner")}}class Tagged extends Option01{constructor(e){super(Xo,"tagged")}}class config_Template extends XFAObject{constructor(e){super(Xo,"template",!0);this.base=null;this.relevant=null;this.startPage=null;this.uri=null;this.xsl=null}}class Threshold extends OptionObject{constructor(e){super(Xo,"threshold",["trace","error","information","warning"])}}class To extends OptionObject{constructor(e){super(Xo,"to",["null","memory","stderr","stdout","system","uri"])}}class TemplateCache extends XFAObject{constructor(e){super(Xo,"templateCache");this.maxEntries=getInteger({data:e.maxEntries,defaultValue:5,validate:e=>e>=0})}}class Trace extends XFAObject{constructor(e){super(Xo,"trace",!0);this.area=new XFAObjectArray}}class Transform extends XFAObject{constructor(e){super(Xo,"transform",!0);this.groupParent=null;this.ifEmpty=null;this.nameAttr=null;this.picture=null;this.presence=null;this.rename=null;this.whitespace=null}}class Type extends OptionObject{constructor(e){super(Xo,"type",["none","ascii85","asciiHex","ccittfax","flate","lzw","runLength","native","xdp","mergedXDP"])}}class Uri extends StringObject{constructor(e){super(Xo,"uri")}}class config_Validate extends OptionObject{constructor(e){super(Xo,"validate",["preSubmit","prePrint","preExecute","preSave"])}}class ValidateApprovalSignatures extends ContentObject{constructor(e){super(Xo,"validateApprovalSignatures")}[Zn](){this[Vn]=this[Vn].trim().split(/\s+/).filter(e=>["docReady","postSign"].includes(e))}}class ValidationMessaging extends OptionObject{constructor(e){super(Xo,"validationMessaging",["allMessagesIndividually","allMessagesTogether","firstMessageOnly","noMessages"])}}class Version extends OptionObject{constructor(e){super(Xo,"version",["1.7","1.6","1.5","1.4","1.3","1.2"])}}class VersionControl extends XFAObject{constructor(e){super(Xo,"VersionControl");this.outputBelow=getStringOption(e.outputBelow,["warn","error","update"]);this.sourceAbove=getStringOption(e.sourceAbove,["warn","error"]);this.sourceBelow=getStringOption(e.sourceBelow,["update","maintain"])}}class ViewerPreferences extends XFAObject{constructor(e){super(Xo,"viewerPreferences",!0);this.ADBE_JSConsole=null;this.ADBE_JSDebugger=null;this.addViewerPreferences=null;this.duplexOption=null;this.enforce=null;this.numberOfCopies=null;this.pageRange=null;this.pickTrayByPDFSize=null;this.printScaling=null}}class WebClient extends XFAObject{constructor(e){super(Xo,"webClient",!0);this.name=e.name?e.name.trim():"";this.fontInfo=null;this.xdc=null}}class Whitespace extends OptionObject{constructor(e){super(Xo,"whitespace",["preserve","ltrim","normalize","rtrim","trim"])}}class Window extends ContentObject{constructor(e){super(Xo,"window")}[Zn](){const e=this[Vn].split(",",2).map(e=>parseInt(e.trim(),10));if(e.some(e=>isNaN(e)))this[Vn]=[0,0];else{1===e.length&&e.push(e[0]);this[Vn]=e}}}class Xdc extends XFAObject{constructor(e){super(Xo,"xdc",!0);this.uri=new XFAObjectArray;this.xsl=new XFAObjectArray}}class Xdp extends XFAObject{constructor(e){super(Xo,"xdp",!0);this.packets=null}}class Xsl extends XFAObject{constructor(e){super(Xo,"xsl",!0);this.debug=null;this.uri=null}}class Zpl extends XFAObject{constructor(e){super(Xo,"zpl",!0);this.name=e.name?e.name.trim():"";this.batchOutput=null;this.flipLabel=null;this.fontInfo=null;this.xdc=null}}class ConfigNamespace{static[eo](e,t){if(ConfigNamespace.hasOwnProperty(e))return ConfigNamespace[e](t)}static acrobat(e){return new Acrobat(e)}static acrobat7(e){return new Acrobat7(e)}static ADBE_JSConsole(e){return new ADBE_JSConsole(e)}static ADBE_JSDebugger(e){return new ADBE_JSDebugger(e)}static addSilentPrint(e){return new AddSilentPrint(e)}static addViewerPreferences(e){return new AddViewerPreferences(e)}static adjustData(e){return new AdjustData(e)}static adobeExtensionLevel(e){return new AdobeExtensionLevel(e)}static agent(e){return new Agent(e)}static alwaysEmbed(e){return new AlwaysEmbed(e)}static amd(e){return new Amd(e)}static area(e){return new config_Area(e)}static attributes(e){return new Attributes(e)}static autoSave(e){return new AutoSave(e)}static base(e){return new Base(e)}static batchOutput(e){return new BatchOutput(e)}static behaviorOverride(e){return new BehaviorOverride(e)}static cache(e){return new Cache(e)}static change(e){return new Change(e)}static common(e){return new Common(e)}static compress(e){return new Compress(e)}static compressLogicalStructure(e){return new CompressLogicalStructure(e)}static compressObjectStream(e){return new CompressObjectStream(e)}static compression(e){return new Compression(e)}static config(e){return new Config(e)}static conformance(e){return new Conformance(e)}static contentCopy(e){return new ContentCopy(e)}static copies(e){return new Copies(e)}static creator(e){return new Creator(e)}static currentPage(e){return new CurrentPage(e)}static data(e){return new Data(e)}static debug(e){return new Debug(e)}static defaultTypeface(e){return new DefaultTypeface(e)}static destination(e){return new Destination(e)}static documentAssembly(e){return new DocumentAssembly(e)}static driver(e){return new Driver(e)}static duplexOption(e){return new DuplexOption(e)}static dynamicRender(e){return new DynamicRender(e)}static embed(e){return new Embed(e)}static encrypt(e){return new config_Encrypt(e)}static encryption(e){return new config_Encryption(e)}static encryptionLevel(e){return new EncryptionLevel(e)}static enforce(e){return new Enforce(e)}static equate(e){return new Equate(e)}static equateRange(e){return new EquateRange(e)}static exclude(e){return new Exclude(e)}static excludeNS(e){return new ExcludeNS(e)}static flipLabel(e){return new FlipLabel(e)}static fontInfo(e){return new config_FontInfo(e)}static formFieldFilling(e){return new FormFieldFilling(e)}static groupParent(e){return new GroupParent(e)}static ifEmpty(e){return new IfEmpty(e)}static includeXDPContent(e){return new IncludeXDPContent(e)}static incrementalLoad(e){return new IncrementalLoad(e)}static incrementalMerge(e){return new IncrementalMerge(e)}static interactive(e){return new Interactive(e)}static jog(e){return new Jog(e)}static labelPrinter(e){return new LabelPrinter(e)}static layout(e){return new Layout(e)}static level(e){return new Level(e)}static linearized(e){return new Linearized(e)}static locale(e){return new Locale(e)}static localeSet(e){return new LocaleSet(e)}static log(e){return new Log(e)}static map(e){return new MapElement(e)}static mediumInfo(e){return new MediumInfo(e)}static message(e){return new config_Message(e)}static messaging(e){return new Messaging(e)}static mode(e){return new Mode(e)}static modifyAnnots(e){return new ModifyAnnots(e)}static msgId(e){return new MsgId(e)}static nameAttr(e){return new NameAttr(e)}static neverEmbed(e){return new NeverEmbed(e)}static numberOfCopies(e){return new NumberOfCopies(e)}static openAction(e){return new OpenAction(e)}static output(e){return new Output(e)}static outputBin(e){return new OutputBin(e)}static outputXSL(e){return new OutputXSL(e)}static overprint(e){return new Overprint(e)}static packets(e){return new Packets(e)}static pageOffset(e){return new PageOffset(e)}static pageRange(e){return new PageRange(e)}static pagination(e){return new Pagination(e)}static paginationOverride(e){return new PaginationOverride(e)}static part(e){return new Part(e)}static pcl(e){return new Pcl(e)}static pdf(e){return new Pdf(e)}static pdfa(e){return new Pdfa(e)}static permissions(e){return new Permissions(e)}static pickTrayByPDFSize(e){return new PickTrayByPDFSize(e)}static picture(e){return new config_Picture(e)}static plaintextMetadata(e){return new PlaintextMetadata(e)}static presence(e){return new Presence(e)}static present(e){return new Present(e)}static print(e){return new Print(e)}static printHighQuality(e){return new PrintHighQuality(e)}static printScaling(e){return new PrintScaling(e)}static printerName(e){return new PrinterName(e)}static producer(e){return new Producer(e)}static ps(e){return new Ps(e)}static range(e){return new Range(e)}static record(e){return new Record(e)}static relevant(e){return new Relevant(e)}static rename(e){return new Rename(e)}static renderPolicy(e){return new RenderPolicy(e)}static runScripts(e){return new RunScripts(e)}static script(e){return new config_Script(e)}static scriptModel(e){return new ScriptModel(e)}static severity(e){return new Severity(e)}static silentPrint(e){return new SilentPrint(e)}static staple(e){return new Staple(e)}static startNode(e){return new StartNode(e)}static startPage(e){return new StartPage(e)}static submitFormat(e){return new SubmitFormat(e)}static submitUrl(e){return new SubmitUrl(e)}static subsetBelow(e){return new SubsetBelow(e)}static suppressBanner(e){return new SuppressBanner(e)}static tagged(e){return new Tagged(e)}static template(e){return new config_Template(e)}static templateCache(e){return new TemplateCache(e)}static threshold(e){return new Threshold(e)}static to(e){return new To(e)}static trace(e){return new Trace(e)}static transform(e){return new Transform(e)}static type(e){return new Type(e)}static uri(e){return new Uri(e)}static validate(e){return new config_Validate(e)}static validateApprovalSignatures(e){return new ValidateApprovalSignatures(e)}static validationMessaging(e){return new ValidationMessaging(e)}static version(e){return new Version(e)}static versionControl(e){return new VersionControl(e)}static viewerPreferences(e){return new ViewerPreferences(e)}static webClient(e){return new WebClient(e)}static whitespace(e){return new Whitespace(e)}static window(e){return new Window(e)}static xdc(e){return new Xdc(e)}static xdp(e){return new Xdp(e)}static xsl(e){return new Xsl(e)}static zpl(e){return new Zpl(e)}}const qo=to.connectionSet.id;class ConnectionSet extends XFAObject{constructor(e){super(qo,"connectionSet",!0);this.wsdlConnection=new XFAObjectArray;this.xmlConnection=new XFAObjectArray;this.xsdConnection=new XFAObjectArray}}class EffectiveInputPolicy extends XFAObject{constructor(e){super(qo,"effectiveInputPolicy");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class EffectiveOutputPolicy extends XFAObject{constructor(e){super(qo,"effectiveOutputPolicy");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Operation extends StringObject{constructor(e){super(qo,"operation");this.id=e.id||"";this.input=e.input||"";this.name=e.name||"";this.output=e.output||"";this.use=e.use||"";this.usehref=e.usehref||""}}class RootElement extends StringObject{constructor(e){super(qo,"rootElement");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class SoapAction extends StringObject{constructor(e){super(qo,"soapAction");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class SoapAddress extends StringObject{constructor(e){super(qo,"soapAddress");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class connection_set_Uri extends StringObject{constructor(e){super(qo,"uri");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class WsdlAddress extends StringObject{constructor(e){super(qo,"wsdlAddress");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class WsdlConnection extends XFAObject{constructor(e){super(qo,"wsdlConnection",!0);this.dataDescription=e.dataDescription||"";this.name=e.name||"";this.effectiveInputPolicy=null;this.effectiveOutputPolicy=null;this.operation=null;this.soapAction=null;this.soapAddress=null;this.wsdlAddress=null}}class XmlConnection extends XFAObject{constructor(e){super(qo,"xmlConnection",!0);this.dataDescription=e.dataDescription||"";this.name=e.name||"";this.uri=null}}class XsdConnection extends XFAObject{constructor(e){super(qo,"xsdConnection",!0);this.dataDescription=e.dataDescription||"";this.name=e.name||"";this.rootElement=null;this.uri=null}}class ConnectionSetNamespace{static[eo](e,t){if(ConnectionSetNamespace.hasOwnProperty(e))return ConnectionSetNamespace[e](t)}static connectionSet(e){return new ConnectionSet(e)}static effectiveInputPolicy(e){return new EffectiveInputPolicy(e)}static effectiveOutputPolicy(e){return new EffectiveOutputPolicy(e)}static operation(e){return new Operation(e)}static rootElement(e){return new RootElement(e)}static soapAction(e){return new SoapAction(e)}static soapAddress(e){return new SoapAddress(e)}static uri(e){return new connection_set_Uri(e)}static wsdlAddress(e){return new WsdlAddress(e)}static wsdlConnection(e){return new WsdlConnection(e)}static xmlConnection(e){return new XmlConnection(e)}static xsdConnection(e){return new XsdConnection(e)}}const Ho=to.datasets.id;class datasets_Data extends XmlObject{constructor(e){super(Ho,"data",e)}[Cs](){return!0}}class Datasets extends XFAObject{constructor(e){super(Ho,"datasets",!0);this.data=null;this.Signature=null}[Bs](e){const t=e[Ms];("data"===t&&e[Ds]===Ho||"Signature"===t&&e[Ds]===to.signature.id)&&(this[t]=e);this[Xn](e)}}class DatasetsNamespace{static[eo](e,t){if(DatasetsNamespace.hasOwnProperty(e))return DatasetsNamespace[e](t)}static datasets(e){return new Datasets(e)}static data(e){return new datasets_Data(e)}}const Wo=to.localeSet.id;class CalendarSymbols extends XFAObject{constructor(e){super(Wo,"calendarSymbols",!0);this.name="gregorian";this.dayNames=new XFAObjectArray(2);this.eraNames=null;this.meridiemNames=null;this.monthNames=new XFAObjectArray(2)}}class CurrencySymbol extends StringObject{constructor(e){super(Wo,"currencySymbol");this.name=getStringOption(e.name,["symbol","isoname","decimal"])}}class CurrencySymbols extends XFAObject{constructor(e){super(Wo,"currencySymbols",!0);this.currencySymbol=new XFAObjectArray(3)}}class DatePattern extends StringObject{constructor(e){super(Wo,"datePattern");this.name=getStringOption(e.name,["full","long","med","short"])}}class DatePatterns extends XFAObject{constructor(e){super(Wo,"datePatterns",!0);this.datePattern=new XFAObjectArray(4)}}class DateTimeSymbols extends ContentObject{constructor(e){super(Wo,"dateTimeSymbols")}}class Day extends StringObject{constructor(e){super(Wo,"day")}}class DayNames extends XFAObject{constructor(e){super(Wo,"dayNames",!0);this.abbr=getInteger({data:e.abbr,defaultValue:0,validate:e=>1===e});this.day=new XFAObjectArray(7)}}class Era extends StringObject{constructor(e){super(Wo,"era")}}class EraNames extends XFAObject{constructor(e){super(Wo,"eraNames",!0);this.era=new XFAObjectArray(2)}}class locale_set_Locale extends XFAObject{constructor(e){super(Wo,"locale",!0);this.desc=e.desc||"";this.name="isoname";this.calendarSymbols=null;this.currencySymbols=null;this.datePatterns=null;this.dateTimeSymbols=null;this.numberPatterns=null;this.numberSymbols=null;this.timePatterns=null;this.typeFaces=null}}class locale_set_LocaleSet extends XFAObject{constructor(e){super(Wo,"localeSet",!0);this.locale=new XFAObjectArray}}class Meridiem extends StringObject{constructor(e){super(Wo,"meridiem")}}class MeridiemNames extends XFAObject{constructor(e){super(Wo,"meridiemNames",!0);this.meridiem=new XFAObjectArray(2)}}class Month extends StringObject{constructor(e){super(Wo,"month")}}class MonthNames extends XFAObject{constructor(e){super(Wo,"monthNames",!0);this.abbr=getInteger({data:e.abbr,defaultValue:0,validate:e=>1===e});this.month=new XFAObjectArray(12)}}class NumberPattern extends StringObject{constructor(e){super(Wo,"numberPattern");this.name=getStringOption(e.name,["full","long","med","short"])}}class NumberPatterns extends XFAObject{constructor(e){super(Wo,"numberPatterns",!0);this.numberPattern=new XFAObjectArray(4)}}class NumberSymbol extends StringObject{constructor(e){super(Wo,"numberSymbol");this.name=getStringOption(e.name,["decimal","grouping","percent","minus","zero"])}}class NumberSymbols extends XFAObject{constructor(e){super(Wo,"numberSymbols",!0);this.numberSymbol=new XFAObjectArray(5)}}class TimePattern extends StringObject{constructor(e){super(Wo,"timePattern");this.name=getStringOption(e.name,["full","long","med","short"])}}class TimePatterns extends XFAObject{constructor(e){super(Wo,"timePatterns",!0);this.timePattern=new XFAObjectArray(4)}}class TypeFace extends XFAObject{constructor(e){super(Wo,"typeFace",!0);this.name=""|e.name}}class TypeFaces extends XFAObject{constructor(e){super(Wo,"typeFaces",!0);this.typeFace=new XFAObjectArray}}class LocaleSetNamespace{static[eo](e,t){if(LocaleSetNamespace.hasOwnProperty(e))return LocaleSetNamespace[e](t)}static calendarSymbols(e){return new CalendarSymbols(e)}static currencySymbol(e){return new CurrencySymbol(e)}static currencySymbols(e){return new CurrencySymbols(e)}static datePattern(e){return new DatePattern(e)}static datePatterns(e){return new DatePatterns(e)}static dateTimeSymbols(e){return new DateTimeSymbols(e)}static day(e){return new Day(e)}static dayNames(e){return new DayNames(e)}static era(e){return new Era(e)}static eraNames(e){return new EraNames(e)}static locale(e){return new locale_set_Locale(e)}static localeSet(e){return new locale_set_LocaleSet(e)}static meridiem(e){return new Meridiem(e)}static meridiemNames(e){return new MeridiemNames(e)}static month(e){return new Month(e)}static monthNames(e){return new MonthNames(e)}static numberPattern(e){return new NumberPattern(e)}static numberPatterns(e){return new NumberPatterns(e)}static numberSymbol(e){return new NumberSymbol(e)}static numberSymbols(e){return new NumberSymbols(e)}static timePattern(e){return new TimePattern(e)}static timePatterns(e){return new TimePatterns(e)}static typeFace(e){return new TypeFace(e)}static typeFaces(e){return new TypeFaces(e)}}const Go=to.signature.id;class signature_Signature extends XFAObject{constructor(e){super(Go,"signature",!0)}}class SignatureNamespace{static[eo](e,t){if(SignatureNamespace.hasOwnProperty(e))return SignatureNamespace[e](t)}static signature(e){return new signature_Signature(e)}}const $o=to.stylesheet.id;class Stylesheet extends XFAObject{constructor(e){super($o,"stylesheet",!0)}}class StylesheetNamespace{static[eo](e,t){if(StylesheetNamespace.hasOwnProperty(e))return StylesheetNamespace[e](t)}static stylesheet(e){return new Stylesheet(e)}}const zo=to.xdp.id;class xdp_Xdp extends XFAObject{constructor(e){super(zo,"xdp",!0);this.uuid=e.uuid||"";this.timeStamp=e.timeStamp||"";this.config=null;this.connectionSet=null;this.datasets=null;this.localeSet=null;this.stylesheet=new XFAObjectArray;this.template=null}[Ns](e){const t=to[e[Ms]];return t&&e[Ds]===t.id}}class XdpNamespace{static[eo](e,t){if(XdpNamespace.hasOwnProperty(e))return XdpNamespace[e](t)}static xdp(e){return new xdp_Xdp(e)}}const Vo=to.xhtml.id,Ko=Symbol(),Jo=new Set(["color","font","font-family","font-size","font-stretch","font-style","font-weight","margin","margin-bottom","margin-left","margin-right","margin-top","letter-spacing","line-height","orphans","page-break-after","page-break-before","page-break-inside","tab-interval","tab-stop","text-align","text-decoration","text-indent","vertical-align","widows","kerning-mode","xfa-font-horizontal-scale","xfa-font-vertical-scale","xfa-spacerun","xfa-tab-stops"]),Yo=new Map([["page-break-after","breakAfter"],["page-break-before","breakBefore"],["page-break-inside","breakInside"],["kerning-mode",e=>"none"===e?"none":"normal"],["xfa-font-horizontal-scale",e=>`scaleX(${Math.max(0,parseInt(e)/100).toFixed(2)})`],["xfa-font-vertical-scale",e=>`scaleY(${Math.max(0,parseInt(e)/100).toFixed(2)})`],["xfa-spacerun",""],["xfa-tab-stops",""],["font-size",(e,t)=>measureToString(.99*(e=t.fontSize=Math.abs(getMeasurement(e))))],["letter-spacing",e=>measureToString(getMeasurement(e))],["line-height",e=>measureToString(getMeasurement(e))],["margin",e=>measureToString(getMeasurement(e))],["margin-bottom",e=>measureToString(getMeasurement(e))],["margin-left",e=>measureToString(getMeasurement(e))],["margin-right",e=>measureToString(getMeasurement(e))],["margin-top",e=>measureToString(getMeasurement(e))],["text-indent",e=>measureToString(getMeasurement(e))],["font-family",e=>e],["vertical-align",e=>measureToString(getMeasurement(e))]]),Zo=/\s+/g,Qo=/[\r\n]+/g,ec=/\r\n?/g;function mapStyle(e,t,a){const r=Object.create(null);if(!e)return r;const i=Object.create(null);for(const[t,a]of e.split(";").map(e=>e.split(":",2))){const e=Yo.get(t);if(""===e)continue;let n=a;e&&(n="string"==typeof e?e:e(a,i));t.endsWith("scale")?r.transform=r.transform?`${r[t]} ${n}`:n:r[t.replaceAll(/-([a-zA-Z])/g,(e,t)=>t.toUpperCase())]=n}r.fontFamily&&setFontFamily({typeface:r.fontFamily,weight:r.fontWeight||"normal",posture:r.fontStyle||"normal",size:i.fontSize||0},t,t[ps].fontFinder,r);if(a&&r.verticalAlign&&"0px"!==r.verticalAlign&&r.fontSize){const e=.583,t=.333,a=getMeasurement(r.fontSize);r.fontSize=measureToString(a*e);r.verticalAlign=measureToString(Math.sign(getMeasurement(r.verticalAlign))*a*t)}a&&r.fontSize&&(r.fontSize=`calc(${r.fontSize} * var(--total-scale-factor))`);fixTextIndent(r);return r}const tc=new Set(["body","html"]);class XhtmlObject extends XmlObject{constructor(e,t){super(Vo,t);this[Ko]=!1;this.style=e.style||""}[Hn](e){super[Hn](e);this.style=function checkStyle(e){return e.style?e.style.split(";").filter(e=>!!e.trim()).map(e=>e.split(":",2).map(e=>e.trim())).filter(([t,a])=>{"font-family"===t&&e[ps].usedTypefaces.add(a);return Jo.has(t)}).map(e=>e.join(":")).join(";"):""}(this)}[Un](){return!tc.has(this[Ms])}[Es](e,t=!1){if(t)this[Ko]=!0;else{e=e.replaceAll(Qo,"");this.style.includes("xfa-spacerun:yes")||(e=e.replaceAll(Zo," "))}e&&(this[Vn]+=e)}[Ls](e,t=!0){const a=Object.create(null),r={top:NaN,bottom:NaN,left:NaN,right:NaN};let i=null;for(const[e,t]of this.style.split(";").map(e=>e.split(":",2)))switch(e){case"font-family":a.typeface=stripQuotes(t);break;case"font-size":a.size=getMeasurement(t);break;case"font-weight":a.weight=t;break;case"font-style":a.posture=t;break;case"letter-spacing":a.letterSpacing=getMeasurement(t);break;case"margin":const e=t.split(/ \t/).map(e=>getMeasurement(e));switch(e.length){case 1:r.top=r.bottom=r.left=r.right=e[0];break;case 2:r.top=r.bottom=e[0];r.left=r.right=e[1];break;case 3:r.top=e[0];r.bottom=e[2];r.left=r.right=e[1];break;case 4:r.top=e[0];r.left=e[1];r.bottom=e[2];r.right=e[3]}break;case"margin-top":r.top=getMeasurement(t);break;case"margin-bottom":r.bottom=getMeasurement(t);break;case"margin-left":r.left=getMeasurement(t);break;case"margin-right":r.right=getMeasurement(t);break;case"line-height":i=getMeasurement(t)}e.pushData(a,r,i);if(this[Vn])e.addString(this[Vn]);else for(const t of this[ls]())"#text"!==t[Ms]?t[Ls](e):e.addString(t[Vn]);t&&e.popFont()}[Js](e){const t=[];this[Yn]={children:t};this[qn]({});if(0===t.length&&!this[Vn])return HTMLResult.EMPTY;let a;a=this[Ko]?this[Vn]?this[Vn].replaceAll(ec,"\n"):void 0:this[Vn]||void 0;return HTMLResult.success({name:this[Ms],attributes:{href:this.href,style:mapStyle(this.style,this,this[Ko])},children:t,value:a})}}class A extends XhtmlObject{constructor(e){super(e,"a");this.href=fixURL(e.href)||""}}class B extends XhtmlObject{constructor(e){super(e,"b")}[Ls](e){e.pushFont({weight:"bold"});super[Ls](e);e.popFont()}}class Body extends XhtmlObject{constructor(e){super(e,"body")}[Js](e){const t=super[Js](e),{html:a}=t;if(!a)return HTMLResult.EMPTY;a.name="div";a.attributes.class=["xfaRich"];return t}}class Br extends XhtmlObject{constructor(e){super(e,"br")}[Vs](){return"\n"}[Ls](e){e.addString("\n")}[Js](e){return HTMLResult.success({name:"br"})}}class Html extends XhtmlObject{constructor(e){super(e,"html")}[Js](e){const t=[];this[Yn]={children:t};this[qn]({});if(0===t.length)return HTMLResult.success({name:"div",attributes:{class:["xfaRich"],style:{}},value:this[Vn]||""});if(1===t.length){const e=t[0];if(e.attributes?.class.includes("xfaRich"))return HTMLResult.success(e)}return HTMLResult.success({name:"div",attributes:{class:["xfaRich"],style:{}},children:t})}}class I extends XhtmlObject{constructor(e){super(e,"i")}[Ls](e){e.pushFont({posture:"italic"});super[Ls](e);e.popFont()}}class Li extends XhtmlObject{constructor(e){super(e,"li")}}class Ol extends XhtmlObject{constructor(e){super(e,"ol")}}class P extends XhtmlObject{constructor(e){super(e,"p")}[Ls](e){super[Ls](e,!1);e.addString("\n");e.addPara();e.popFont()}[Vs](){return this[fs]()[ls]().at(-1)===this?super[Vs]():super[Vs]()+"\n"}}class Span extends XhtmlObject{constructor(e){super(e,"span")}}class Sub extends XhtmlObject{constructor(e){super(e,"sub")}}class Sup extends XhtmlObject{constructor(e){super(e,"sup")}}class Ul extends XhtmlObject{constructor(e){super(e,"ul")}}class XhtmlNamespace{static[eo](e,t){if(XhtmlNamespace.hasOwnProperty(e))return XhtmlNamespace[e](t)}static a(e){return new A(e)}static b(e){return new B(e)}static body(e){return new Body(e)}static br(e){return new Br(e)}static html(e){return new Html(e)}static i(e){return new I(e)}static li(e){return new Li(e)}static ol(e){return new Ol(e)}static p(e){return new P(e)}static span(e){return new Span(e)}static sub(e){return new Sub(e)}static sup(e){return new Sup(e)}static ul(e){return new Ul(e)}}const ac={config:ConfigNamespace,connection:ConnectionSetNamespace,datasets:DatasetsNamespace,localeSet:LocaleSetNamespace,signature:SignatureNamespace,stylesheet:StylesheetNamespace,template:TemplateNamespace,xdp:XdpNamespace,xhtml:XhtmlNamespace};class UnknownNamespace{constructor(e){this.namespaceId=e}[eo](e,t){return new XmlObject(this.namespaceId,e,t)}}class Root extends XFAObject{constructor(e){super(-1,"root",Object.create(null));this.element=null;this[bs]=e}[Bs](e){this.element=e;return!0}[Zn](){super[Zn]();if(this.element.template instanceof Template){this[bs].set(Xs,this.element);this.element.template[qs](this[bs]);this.element.template[bs]=this[bs]}}}class Empty extends XFAObject{constructor(){super(-1,"",Object.create(null))}[Bs](e){return!1}}class Builder{constructor(e=null){this._namespaceStack=[];this._nsAgnosticLevel=0;this._namespacePrefixes=new Map;this._namespaces=new Map;this._nextNsId=Math.max(...Object.values(to).map(({id:e})=>e));this._currentNamespace=e||new UnknownNamespace(++this._nextNsId)}buildRoot(e){return new Root(e)}build({nsPrefix:e,name:t,attributes:a,namespace:r,prefixes:i}){const n=null!==r;if(n){this._namespaceStack.push(this._currentNamespace);this._currentNamespace=this._searchNamespace(r)}i&&this._addNamespacePrefix(i);if(a.hasOwnProperty(Rs)){const e=ac.datasets,t=a[Rs];let r=null;for(const[a,i]of Object.entries(t)){if(this._getNamespaceToUse(a)===e){r={xfa:i};break}}r?a[Rs]=r:delete a[Rs]}const s=this._getNamespaceToUse(e),o=s?.[eo](t,a)||new Empty;o[Cs]()&&this._nsAgnosticLevel++;(n||i||o[Cs]())&&(o[Gn]={hasNamespace:n,prefixes:i,nsAgnostic:o[Cs]()});return o}isNsAgnostic(){return this._nsAgnosticLevel>0}_searchNamespace(e){let t=this._namespaces.get(e);if(t)return t;for(const[a,{check:r}]of Object.entries(to))if(r(e)){t=ac[a];if(t){this._namespaces.set(e,t);return t}break}t=new UnknownNamespace(++this._nextNsId);this._namespaces.set(e,t);return t}_addNamespacePrefix(e){for(const{prefix:t,value:a}of e){const e=this._searchNamespace(a);let r=this._namespacePrefixes.get(t);if(!r){r=[];this._namespacePrefixes.set(t,r)}r.push(e)}}_getNamespaceToUse(e){if(!e)return this._currentNamespace;const t=this._namespacePrefixes.get(e);if(t?.length>0)return t.at(-1);warn(`Unknown namespace prefix: ${e}.`);return null}clean(e){const{hasNamespace:t,prefixes:a,nsAgnostic:r}=e;t&&(this._currentNamespace=this._namespaceStack.pop());a&&a.forEach(({prefix:e})=>{this._namespacePrefixes.get(e).pop()});r&&this._nsAgnosticLevel--}}class XFAParser extends XMLParserBase{constructor(e=null,t=!1){super();this._builder=new Builder(e);this._stack=[];this._globalData={usedTypefaces:new Set};this._ids=new Map;this._current=this._builder.buildRoot(this._ids);this._errorCode=Fn;this._whiteRegex=/^\s+$/;this._nbsps=/\xa0+/g;this._richText=t}parse(e){this.parseXml(e);if(this._errorCode===Fn){this._current[Zn]();return this._current.element}}onText(e){e=e.replace(this._nbsps,e=>e.slice(1)+" ");this._richText||this._current[Un]()?this._current[Es](e,this._richText):this._whiteRegex.test(e)||this._current[Es](e.trim())}onCdata(e){this._current[Es](e)}_mkAttributes(e,t){let a=null,r=null;const i=Object.create({});for(const{name:n,value:s}of e)if("xmlns"===n)a?warn(`XFA - multiple namespace definition in <${t}>`):a=s;else if(n.startsWith("xmlns:")){const e=n.substring(6);r??=[];r.push({prefix:e,value:s})}else{const e=n.indexOf(":");if(-1===e)i[n]=s;else{const t=i[Rs]??=Object.create(null),[a,r]=[n.slice(0,e),n.slice(e+1)];(t[a]||=Object.create(null))[r]=s}}return[a,r,i]}_getNameAndPrefix(e,t){const a=e.indexOf(":");return-1===a?[e,null]:[e.substring(a+1),t?"":e.substring(0,a)]}onBeginElement(e,t,a){const[r,i,n]=this._mkAttributes(t,e),[s,o]=this._getNameAndPrefix(e,this._builder.isNsAgnostic()),c=this._builder.build({nsPrefix:o,name:s,attributes:n,namespace:r,prefixes:i});c[ps]=this._globalData;if(a){c[Zn]();this._current[Bs](c)&&c[Ws](this._ids);c[Hn](this._builder)}else{this._stack.push(this._current);this._current=c}}onEndElement(e){const t=this._current;if(t[Ss]()&&"string"==typeof t[Vn]){const e=new XFAParser;e._globalData=this._globalData;const a=e.parse(t[Vn]);t[Vn]=null;t[Bs](a)}t[Zn]();this._current=this._stack.pop();this._current[Bs](t)&&t[Ws](this._ids);t[Hn](this._builder)}onError(e){this._errorCode=e}}class XFAFactory{constructor(e){try{this.root=(new XFAParser).parse(XFAFactory._createDocument(e));const t=new Binder(this.root);this.form=t.bind();this.dataHandler=new DataHandler(this.root,t.getData());this.form[ps].template=this.form}catch(e){warn(`XFA - an error occurred during parsing and binding: ${e}`)}}isValid(){return!(!this.root||!this.form)}_createPagesHelper(){const e=this.form[Ks]();return new Promise((t,a)=>{const nextIteration=()=>{try{const a=e.next();a.done?t(a.value):setTimeout(nextIteration,0)}catch(e){a(e)}};setTimeout(nextIteration,0)})}async _createPages(){try{this.pages=await this._createPagesHelper();this.dims=this.pages.children.map(e=>{const{width:t,height:a}=e.attributes.style;return[0,0,parseInt(t),parseInt(a)]})}catch(e){warn(`XFA - an error occurred during layout: ${e}`)}}getBoundingBox(e){return this.dims[e]}async getNumPages(){this.pages||await this._createPages();return this.dims.length}setImages(e){this.form[ps].images=e}setFonts(e){this.form[ps].fontFinder=new FontFinder(e);const t=[];for(let e of this.form[ps].usedTypefaces){e=stripQuotes(e);this.form[ps].fontFinder.find(e)||t.push(e)}return t.length>0?t:null}appendFonts(e,t){this.form[ps].fontFinder.add(e,t)}async getPages(){this.pages||await this._createPages();const e=this.pages;this.pages=null;return e}serializeData(e){return this.dataHandler.serialize(e)}static _createDocument(e){return e["/xdp:xdp"]?Object.values(e).join(""):e["xdp:xdp"]}static getRichTextAsHtml(e){if(!e||"string"!=typeof e)return null;try{let t=new XFAParser(XhtmlNamespace,!0).parse(e);if(!["body","xhtml"].includes(t[Ms])){const e=XhtmlNamespace.body({});e[Xn](t);t=e}const a=t[Js]();if(!a.success)return null;const{html:r}=a,{attributes:i}=r;if(i){i.class&&(i.class=i.class.filter(e=>!e.startsWith("xfa")));i.dir="auto"}return{html:r,str:t[Vs]()}}catch(e){warn(`XFA - an error occurred during parsing of rich text: ${e}`)}return null}}class AnnotationFactory{static createGlobals(e){return Promise.all([e.ensureCatalog("acroForm"),e.ensureDoc("xfaDatasets"),e.ensureCatalog("structTreeRoot"),e.ensureCatalog("baseUrl"),e.ensureCatalog("attachments"),e.ensureCatalog("globalColorSpaceCache")]).then(([t,a,r,i,n,s])=>({pdfManager:e,acroForm:t instanceof Dict?t:Dict.empty,xfaDatasets:a,structTreeRoot:r,baseUrl:i,attachments:n,globalColorSpaceCache:s}),e=>{warn(`createGlobals: "${e}".`);return null})}static async create(e,t,a,r,i,n,s,o){const c=i?await this._getPageIndex(e,t,a.pdfManager):null;return a.pdfManager.ensure(this,"_create",[e,t,a,r,i,n,s,c,o])}static _create(e,t,a,r,i=!1,n=null,s=null,o=null,c=null){const l=e.fetchIfRef(t);if(!(l instanceof Dict))return;let h=l.get("Subtype");h=h instanceof Name?h.name:null;if(s&&!s.has(D[h.toUpperCase()]))return null;const{acroForm:u,pdfManager:d}=a,f=t instanceof Ref?t.toString():`annot_${r.createObjId()}`,g={xref:e,ref:t,dict:l,subtype:h,id:f,annotationGlobals:a,collectFields:i,orphanFields:n,needAppearances:!i&&!0===u.get("NeedAppearances"),pageIndex:o,evaluatorOptions:d.evaluatorOptions,pageRef:c};switch(h){case"Link":return new LinkAnnotation(g);case"Text":return new TextAnnotation(g);case"Widget":let e=getInheritableProperty({dict:l,key:"FT"});e=e instanceof Name?e.name:null;switch(e){case"Tx":return new TextWidgetAnnotation(g);case"Btn":return new ButtonWidgetAnnotation(g);case"Ch":return new ChoiceWidgetAnnotation(g);case"Sig":return new SignatureWidgetAnnotation(g)}warn(`Unimplemented widget field type "${e}", falling back to base field type.`);return new WidgetAnnotation(g);case"Popup":return new PopupAnnotation(g);case"FreeText":return new FreeTextAnnotation(g);case"Line":return new LineAnnotation(g);case"Square":return new SquareAnnotation(g);case"Circle":return new CircleAnnotation(g);case"PolyLine":return new PolylineAnnotation(g);case"Polygon":return new PolygonAnnotation(g);case"Caret":return new CaretAnnotation(g);case"Ink":return new InkAnnotation(g);case"Highlight":return new HighlightAnnotation(g);case"Underline":return new UnderlineAnnotation(g);case"Squiggly":return new SquigglyAnnotation(g);case"StrikeOut":return new StrikeOutAnnotation(g);case"Stamp":return new StampAnnotation(g);case"FileAttachment":return new FileAttachmentAnnotation(g);default:i||warn(h?`Unimplemented annotation type "${h}", falling back to base annotation.`:"Annotation is missing the required /Subtype.");return new Annotation(g)}}static async _getPageIndex(e,t,a){try{const r=await e.fetchIfRefAsync(t);if(!(r instanceof Dict))return-1;const i=r.getRaw("P");if(i instanceof Ref)try{return await a.ensureCatalog("getPageIndex",[i])}catch(e){info(`_getPageIndex -- not a valid page reference: "${e}".`)}if(r.has("Kids"))return-1;const n=await a.ensureDoc("numPages");for(let e=0;ee/255)||t}function getQuadPoints(e,t){const a=e.getArray("QuadPoints");if(!isNumberArray(a,null)||0===a.length||a.length%8>0)return null;const r=new Float32Array(a.length);for(let e=0,i=a.length;et[2]||gt[3]))return null;r.set([d,p,f,p,d,g,f,g],e)}return r}function getTransformMatrix(e,t,a){const r=new Float32Array([1/0,1/0,-1/0,-1/0]);Util.axialAlignedBoundingBox(t,a,r);const[i,n,s,o]=r;if(i===s||n===o)return[1,0,0,1,e[0],e[1]];const c=(e[2]-e[0])/(s-i),l=(e[3]-e[1])/(o-n);return[c,0,0,l,e[0]-i*c,e[1]-n*l]}class Annotation{constructor(e){const{dict:t,xref:a,annotationGlobals:r,ref:i,orphanFields:n}=e,s=n?.get(i);s&&t.set("Parent",s);this.setTitle(t.get("T"));this.setContents(t.get("Contents"));this.setModificationDate(t.get("M"));this.setFlags(t.get("F"));this.setRectangle(t.getArray("Rect"));this.setColor(t.getArray("C"));this.setBorderStyle(t);this.setAppearance(t);this.setOptionalContent(t);const o=t.get("MK");this.setBorderAndBackgroundColors(o);this.setRotation(o,t);this.ref=e.ref instanceof Ref?e.ref:null;this._streams=[];this.appearance&&this._streams.push(this.appearance);const c=!!(this.flags&j),l=!!(this.flags&X);this.data={annotationFlags:this.flags,borderStyle:this.borderStyle,color:this.color,backgroundColor:this.backgroundColor,borderColor:this.borderColor,rotation:this.rotation,contentsObj:this._contents,hasAppearance:!!this.appearance,id:e.id,modificationDate:this.modificationDate,rect:this.rectangle,subtype:e.subtype,hasOwnCanvas:!1,noRotate:!!(this.flags&_),noHTML:c&&l,isEditable:!1,structParent:-1};if(r.structTreeRoot){let a=t.get("StructParent");this.data.structParent=a=Number.isInteger(a)&&a>=0?a:-1;r.structTreeRoot.addAnnotationIdToPage(e.pageRef,a)}if(e.collectFields){const r=t.get("Kids");if(Array.isArray(r)){const e=[];for(const t of r)t instanceof Ref&&e.push(t.toString());0!==e.length&&(this.data.kidIds=e)}this.data.actions=collectActions(a,t,ie);this.data.fieldName=this._constructFieldName(t);this.data.pageIndex=e.pageIndex}const h=t.get("IT");h instanceof Name&&(this.data.it=h.name);this._isOffscreenCanvasSupported=e.evaluatorOptions.isOffscreenCanvasSupported;this._fallbackFontDict=null;this._needAppearances=!1}_hasFlag(e,t){return!!(e&t)}_buildFlags(e,t){let{flags:a}=this;if(void 0===e){if(void 0===t)return;return t?a&~L:a&~E|L}if(e){a|=L;return t?a&~U|E:a&~E|U}a&=~(E|U);return t?a&~L:a|L}_isViewable(e){return!this._hasFlag(e,N)&&!this._hasFlag(e,U)}_isPrintable(e){return this._hasFlag(e,L)&&!this._hasFlag(e,E)&&!this._hasFlag(e,N)}mustBeViewed(e,t){const a=e?.get(this.data.id)?.noView;return void 0!==a?!a:this.viewable&&!this._hasFlag(this.flags,E)}mustBePrinted(e){const t=e?.get(this.data.id)?.noPrint;return void 0!==t?!t:this.printable}mustBeViewedWhenEditing(e,t=null){return e?!this.data.isEditable:!t?.has(this.data.id)}get viewable(){return null!==this.data.quadPoints&&(0===this.flags||this._isViewable(this.flags))}get printable(){return null!==this.data.quadPoints&&(0!==this.flags&&this._isPrintable(this.flags))}_parseStringHelper(e){const t="string"==typeof e?stringToPDFString(e):"";return{str:t,dir:t&&"rtl"===bidi(t).dir?"rtl":"ltr"}}setDefaultAppearance(e){const{dict:t,annotationGlobals:a}=e,r=getInheritableProperty({dict:t,key:"DA"})||a.acroForm.get("DA");this._defaultAppearance="string"==typeof r?r:"";this.data.defaultAppearanceData=parseDefaultAppearance(this._defaultAppearance)}setTitle(e){this._title=this._parseStringHelper(e)}setContents(e){this._contents=this._parseStringHelper(e)}setModificationDate(e){this.modificationDate="string"==typeof e?e:null}setFlags(e){this.flags=Number.isInteger(e)&&e>0?e:0;this.flags&N&&"Annotation"!==this.constructor.name&&(this.flags^=N)}hasFlag(e){return this._hasFlag(this.flags,e)}setRectangle(e){this.rectangle=lookupNormalRect(e,[0,0,0,0])}setColor(e){this.color=getRgbColor(e)}setLineEndings(e){this.lineEndings=["None","None"];if(Array.isArray(e)&&2===e.length)for(let t=0;t<2;t++){const a=e[t];if(a instanceof Name)switch(a.name){case"None":continue;case"Square":case"Circle":case"Diamond":case"OpenArrow":case"ClosedArrow":case"Butt":case"ROpenArrow":case"RClosedArrow":case"Slash":this.lineEndings[t]=a.name;continue}warn(`Ignoring invalid lineEnding: ${a}`)}}setRotation(e,t){this.rotation=0;let a=e instanceof Dict?e.get("R")||0:t.get("Rotate")||0;if(Number.isInteger(a)&&0!==a){a%=360;a<0&&(a+=360);a%90==0&&(this.rotation=a)}}setBorderAndBackgroundColors(e){if(e instanceof Dict){this.borderColor=getRgbColor(e.getArray("BC"),null);this.backgroundColor=getRgbColor(e.getArray("BG"),null)}else this.borderColor=this.backgroundColor=null}setBorderStyle(e){this.borderStyle=new AnnotationBorderStyle;if(e instanceof Dict)if(e.has("BS")){const t=e.get("BS");if(t instanceof Dict){const e=t.get("Type");if(!e||isName(e,"Border")){this.borderStyle.setWidth(t.get("W"),this.rectangle);this.borderStyle.setStyle(t.get("S"));this.borderStyle.setDashArray(t.getArray("D"))}}}else if(e.has("Border")){const t=e.getArray("Border");if(Array.isArray(t)&&t.length>=3){this.borderStyle.setHorizontalCornerRadius(t[0]);this.borderStyle.setVerticalCornerRadius(t[1]);this.borderStyle.setWidth(t[2],this.rectangle);4===t.length&&this.borderStyle.setDashArray(t[3],!0)}}else this.borderStyle.setWidth(0)}setAppearance(e){this.appearance=null;const t=e.get("AP");if(!(t instanceof Dict))return;const a=t.get("N");if(a instanceof BaseStream){this.appearance=a;return}if(!(a instanceof Dict))return;const r=e.get("AS");if(!(r instanceof Name&&a.has(r.name)))return;const i=a.get(r.name);i instanceof BaseStream&&(this.appearance=i)}setOptionalContent(e){this.oc=null;const t=e.get("OC");t instanceof Name?warn("setOptionalContent: Support for /Name-entry is not implemented."):t instanceof Dict&&(this.oc=t)}async loadResources(e,t){const a=await t.dict.getAsync("Resources");a&&await ObjectLoader.load(a,e,a.xref);return a}async getOperatorList(e,t,a,r){const{hasOwnCanvas:i,id:n,rect:o}=this.data;let c=this.appearance;const l=!!(i&&a&s);if(l&&(0===this.width||0===this.height)){this.data.hasOwnCanvas=!1;return{opList:new OperatorList,separateForm:!1,separateCanvas:!1}}if(!c){if(!l)return{opList:new OperatorList,separateForm:!1,separateCanvas:!1};c=new StringStream("");c.dict=new Dict}const h=c.dict,u=await this.loadResources(ga,c),d=lookupRect(h.getArray("BBox"),[0,0,1,1]),f=lookupMatrix(h.getArray("Matrix"),fa),g=getTransformMatrix(o,d,f),p=new OperatorList;let m;this.oc&&(m=await e.parseMarkedContentProps(this.oc,null));void 0!==m&&p.addOp(Ct,["OC",m]);p.addOp(Rt,[n,o,g,f,l]);await e.getOperatorList({stream:c,task:t,resources:u,operatorList:p,fallbackFontDict:this._fallbackFontDict});p.addOp(Bt,[]);void 0!==m&&p.addOp(vt,[]);this.reset();return{opList:p,separateForm:!1,separateCanvas:l}}async save(e,t,a,r){return null}get overlaysTextContent(){return!1}get hasTextContent(){return!1}async extractTextContent(e,t,a){if(!this.appearance)return;const r=await this.loadResources(pa,this.appearance),i=[],n=[];let s=null;const o={desiredSize:Math.Infinity,ready:!0,enqueue(e,t){for(const t of e.items)if(void 0!==t.str){s||=t.transform.slice(-2);n.push(t.str);if(t.hasEOL){i.push(n.join("").trimEnd());n.length=0}}}};await e.getTextContent({stream:this.appearance,task:t,resources:r,includeMarkedContent:!0,keepWhiteSpace:!0,sink:o,viewBox:a});this.reset();n.length&&i.push(n.join("").trimEnd());if(i.length>1||i[0]){const e=this.appearance.dict,t=lookupRect(e.getArray("BBox"),null),a=lookupMatrix(e.getArray("Matrix"),null);this.data.textPosition=this._transformPoint(s,t,a);this.data.textContent=i}}_transformPoint(e,t,a){const{rect:r}=this.data;t||=[0,0,1,1];a||=[1,0,0,1,0,0];const i=getTransformMatrix(r,t,a);i[4]-=r[0];i[5]-=r[1];const n=e.slice();Util.applyTransform(n,i);Util.applyTransform(n,a);return n}getFieldObject(){return this.data.kidIds?{id:this.data.id,actions:this.data.actions,name:this.data.fieldName,strokeColor:this.data.borderColor,fillColor:this.data.backgroundColor,type:"",kidIds:this.data.kidIds,page:this.data.pageIndex,rotation:this.rotation}:null}reset(){for(const e of this._streams)e.reset()}_constructFieldName(e){if(!e.has("T")&&!e.has("Parent")){warn("Unknown field name, falling back to empty field name.");return""}if(!e.has("Parent"))return stringToPDFString(e.get("T"));const t=[];e.has("T")&&t.unshift(stringToPDFString(e.get("T")));let a=e;const r=new RefSet;e.objId&&r.put(e.objId);for(;a.has("Parent");){a=a.get("Parent");if(!(a instanceof Dict)||a.objId&&r.has(a.objId))break;a.objId&&r.put(a.objId);a.has("T")&&t.unshift(stringToPDFString(a.get("T")))}return t.join(".")}get width(){return this.data.rect[2]-this.data.rect[0]}get height(){return this.data.rect[3]-this.data.rect[1]}}class AnnotationBorderStyle{constructor(){this.width=1;this.rawWidth=1;this.style=Q;this.dashArray=[3];this.horizontalCornerRadius=0;this.verticalCornerRadius=0}setWidth(e,t=[0,0,0,0]){if(e instanceof Name)this.width=0;else if("number"==typeof e){if(e>0){this.rawWidth=e;const a=(t[2]-t[0])/2,r=(t[3]-t[1])/2;if(a>0&&r>0&&(e>a||e>r)){warn(`AnnotationBorderStyle.setWidth - ignoring width: ${e}`);e=1}}this.width=e}}setStyle(e){if(e instanceof Name)switch(e.name){case"S":this.style=Q;break;case"D":this.style=ee;break;case"B":this.style=te;break;case"I":this.style=ae;break;case"U":this.style=re}}setDashArray(e,t=!1){if(Array.isArray(e)){let a=!0,r=!0;for(const t of e){if(!(+t>=0)){a=!1;break}t>0&&(r=!1)}if(0===e.length||a&&!r){this.dashArray=e;t&&this.setStyle(Name.get("D"))}else this.width=0}else e&&(this.width=0)}setHorizontalCornerRadius(e){Number.isInteger(e)&&(this.horizontalCornerRadius=e)}setVerticalCornerRadius(e){Number.isInteger(e)&&(this.verticalCornerRadius=e)}}class MarkupAnnotation extends Annotation{constructor(e){super(e);const{dict:t}=e;if(t.has("IRT")){const e=t.getRaw("IRT");this.data.inReplyTo=e instanceof Ref?e.toString():null;const a=t.get("RT");this.data.replyType=a instanceof Name?a.name:R}let a=null;if(this.data.replyType===M){const e=t.get("IRT");this.setTitle(e.get("T"));this.data.titleObj=this._title;this.setContents(e.get("Contents"));this.data.contentsObj=this._contents;if(e.has("CreationDate")){this.setCreationDate(e.get("CreationDate"));this.data.creationDate=this.creationDate}else this.data.creationDate=null;if(e.has("M")){this.setModificationDate(e.get("M"));this.data.modificationDate=this.modificationDate}else this.data.modificationDate=null;a=e.getRaw("Popup");if(e.has("C")){this.setColor(e.getArray("C"));this.data.color=this.color}else this.data.color=null}else{this.data.titleObj=this._title;this.setCreationDate(t.get("CreationDate"));this.data.creationDate=this.creationDate;a=t.getRaw("Popup");t.has("C")||(this.data.color=null)}this.data.popupRef=a instanceof Ref?a.toString():null;t.has("RC")&&(this.data.richText=XFAFactory.getRichTextAsHtml(t.get("RC")))}setCreationDate(e){this.creationDate="string"==typeof e?e:null}_setDefaultAppearance({xref:e,extra:t,strokeColor:a,fillColor:r,blendMode:i,strokeAlpha:n,fillAlpha:s,pointsCallback:o}){const c=this.data.rect=[1/0,1/0,-1/0,-1/0],l=["q"];t&&l.push(t);a&&l.push(`${a[0]} ${a[1]} ${a[2]} RG`);r&&l.push(`${r[0]} ${r[1]} ${r[2]} rg`);const h=this.data.quadPoints||Float32Array.from([this.rectangle[0],this.rectangle[3],this.rectangle[2],this.rectangle[3],this.rectangle[0],this.rectangle[1],this.rectangle[2],this.rectangle[1]]);for(let e=0,t=h.length;e"string"==typeof e).map(e=>stringToPDFString(e)):e instanceof Name?stringToPDFString(e.name):"string"==typeof e?stringToPDFString(e):null}hasFieldFlag(e){return!!(this.data.fieldFlags&e)}_isViewable(e){return!0}mustBeViewed(e,t){return t?this.viewable:super.mustBeViewed(e,t)&&!this._hasFlag(this.flags,U)}getRotationMatrix(e){let t=e?.get(this.data.id)?.rotation;void 0===t&&(t=this.rotation);return 0===t?fa:getRotationMatrix(t,this.width,this.height)}getBorderAndBackgroundAppearances(e){let t=e?.get(this.data.id)?.rotation;void 0===t&&(t=this.rotation);if(!this.backgroundColor&&!this.borderColor)return"";const a=0===t||180===t?`0 0 ${this.width} ${this.height} re`:`0 0 ${this.height} ${this.width} re`;let r="";this.backgroundColor&&(r=`${getPdfColor(this.backgroundColor,!0)} ${a} f `);if(this.borderColor){r+=`${this.borderStyle.width||1} w ${getPdfColor(this.borderColor,!1)} ${a} S `}return r}async getOperatorList(e,t,a,r){if(a&l&&!(this instanceof SignatureWidgetAnnotation)&&!this.data.noHTML&&!this.data.hasOwnCanvas)return{opList:new OperatorList,separateForm:!0,separateCanvas:!1};if(!this._hasText)return super.getOperatorList(e,t,a,r);const i=await this._getAppearance(e,t,a,r);if(this.appearance&&null===i)return super.getOperatorList(e,t,a,r);const n=new OperatorList;if(!this._defaultAppearance||null===i)return{opList:n,separateForm:!1,separateCanvas:!1};const o=!!(this.data.hasOwnCanvas&&a&s),c=[0,0,this.width,this.height],h=getTransformMatrix(this.data.rect,c,[1,0,0,1,0,0]);let u;this.oc&&(u=await e.parseMarkedContentProps(this.oc,null));void 0!==u&&n.addOp(Ct,["OC",u]);n.addOp(Rt,[this.data.id,this.data.rect,h,this.getRotationMatrix(r),o]);const d=new StringStream(i);await e.getOperatorList({stream:d,task:t,resources:this._fieldResources.mergedResources,operatorList:n});n.addOp(Bt,[]);void 0!==u&&n.addOp(vt,[]);return{opList:n,separateForm:!1,separateCanvas:o}}_getMKDict(e){const t=new Dict(null);e&&t.set("R",e);t.setIfArray("BC",getPdfColorArray(this.borderColor));t.setIfArray("BG",getPdfColorArray(this.backgroundColor));return t.size>0?t:null}amendSavedDict(e,t){}setValue(e,t,a,r){const{dict:i,ref:n}=function getParentToUpdate(e,t,a){const r=new RefSet,i=e,n={dict:null,ref:null};for(;e instanceof Dict&&!r.has(t);){r.put(t);if(e.has("T"))break;if(!((t=e.getRaw("Parent"))instanceof Ref))return n;e=a.fetch(t)}if(e instanceof Dict&&e!==i){n.dict=e;n.ref=t}return n}(e,this.ref,a);if(i){if(!r.has(n)){const e=i.clone();e.set("V",t);r.put(n,{data:e});return e}}else e.set("V",t);return null}async save(e,t,a,r){const i=a?.get(this.data.id),n=this._buildFlags(i?.noView,i?.noPrint);let s=i?.value,o=i?.rotation;if(s===this.data.fieldValue||void 0===s){if(!this._hasValueFromXFA&&void 0===o&&void 0===n)return;s||=this.data.fieldValue}if(void 0===o&&!this._hasValueFromXFA&&Array.isArray(s)&&Array.isArray(this.data.fieldValue)&&isArrayEqual(s,this.data.fieldValue)&&void 0===n)return;void 0===o&&(o=this.rotation);let l=null;if(!this._needAppearances){l=await this._getAppearance(e,t,c,a);if(null===l&&void 0===n)return}let h=!1;if(l?.needAppearances){h=!0;l=null}const{xref:u}=e,d=u.fetchIfRef(this.ref);if(!(d instanceof Dict))return;const f=new Dict(u);for(const e of d.getKeys())"AP"!==e&&f.set(e,d.getRaw(e));if(void 0!==n){f.set("F",n);if(null===l&&!h){const e=d.getRaw("AP");e&&f.set("AP",e)}}const g={path:this.data.fieldName,value:s},p=this.setValue(f,Array.isArray(s)?s.map(stringToAsciiOrUTF16BE):stringToAsciiOrUTF16BE(s),u,r);this.amendSavedDict(a,p||f);const m=this._getMKDict(o);m&&f.set("MK",m);r.put(this.ref,{data:f,xfa:g,needAppearances:h});if(null!==l){const e=u.getNewTemporaryRef(),t=new Dict(u);f.set("AP",t);t.set("N",e);const i=this._getSaveFieldResources(u),n=new StringStream(l),s=n.dict=new Dict(u);s.setIfName("Subtype","Form");s.set("Resources",i);const c=o%180==0?[0,0,this.width,this.height]:[0,0,this.height,this.width];s.set("BBox",c);const h=this.getRotationMatrix(a);h!==fa&&s.set("Matrix",h);r.put(e,{data:n,xfa:null,needAppearances:!1})}f.set("M",`D:${getModificationDate()}`)}async _getAppearance(e,t,a,r){if(this.data.password)return null;const n=r?.get(this.data.id);let s,o;if(n){s=n.formattedValue||n.value;o=n.rotation}if(void 0===o&&void 0===s&&!this._needAppearances&&(!this._hasValueFromXFA||this.appearance))return null;const l=this.getBorderAndBackgroundAppearances(r);if(void 0===s){s=this.data.fieldValue;if(!s)return`/Tx BMC q ${l}Q EMC`}Array.isArray(s)&&1===s.length&&(s=s[0]);assert("string"==typeof s,"Expected `value` to be a string.");s=s.trimEnd();if(this.data.combo){const e=this.data.options.find(({exportValue:e})=>s===e);s=e?.displayValue||s}if(""===s)return`/Tx BMC q ${l}Q EMC`;void 0===o&&(o=this.rotation);let h,u=-1;if(this.data.multiLine){h=s.split(/\r\n?|\n/).map(e=>e.normalize("NFC"));u=h.length}else h=[s.replace(/\r\n?|\n/,"").normalize("NFC")];let{width:d,height:f}=this;90!==o&&270!==o||([d,f]=[f,d]);this._defaultAppearance||(this.data.defaultAppearanceData=parseDefaultAppearance(this._defaultAppearance="/Helvetica 0 Tf 0 g"));let g,p,m,b=await WidgetAnnotation._getFontData(e,t,this.data.defaultAppearanceData,this._fieldResources.mergedResources);const y=[];let w=!1;for(const e of h){const t=b.encodeString(e);t.length>1&&(w=!0);y.push(t.join(""))}if(w&&a&c)return{needAppearances:!0};if(w&&this._isOffscreenCanvasSupported){const a=this.data.comb?"monospace":"sans-serif",r=new FakeUnicodeFont(e.xref,a),i=r.createFontResources(h.join("")),n=i.getRaw("Font");if(this._fieldResources.mergedResources.has("Font")){const e=this._fieldResources.mergedResources.get("Font");for(const t of n.getKeys())e.set(t,n.getRaw(t))}else this._fieldResources.mergedResources.set("Font",n);const o=r.fontName.name;b=await WidgetAnnotation._getFontData(e,t,{fontName:o,fontSize:0},i);for(let e=0,t=y.length;e2)return`/Tx BMC q ${l}BT `+g+` 1 0 0 1 ${numberToString(2)} ${numberToString(C)} Tm (${escapeString(y[0])}) Tj ET Q EMC`;return`/Tx BMC q ${l}BT `+g+` 1 0 0 1 0 0 Tm ${this._renderText(y[0],b,p,d,k,{shift:0},2,C)} ET Q EMC`}static async _getFontData(e,t,a,r){const i=new OperatorList,n={font:null,clone(){return this}},{fontName:s,fontSize:o}=a;await e.handleSetFont(r,[s&&Name.get(s),o],null,i,t,n,null);return n.font}_getTextWidth(e,t){return Math.sumPrecise(t.charsToGlyphs(e).map(e=>e.width))/1e3}_computeFontSize(e,t,r,i,n){let{fontSize:s}=this.data.defaultAppearanceData,o=(s||12)*a,c=Math.round(e/o);if(!s){const roundWithTwoDigits=e=>Math.floor(100*e)/100;if(-1===n){const n=this._getTextWidth(r,i);s=roundWithTwoDigits(Math.min(e/a,t/n));c=1}else{const l=r.split(/\r\n?|\n/),h=[];for(const e of l){const t=i.encodeString(e).join(""),a=i.charsToGlyphs(t),r=i.getCharPositions(t);h.push({line:t,glyphs:a,positions:r})}const isTooBig=a=>{let r=0;for(const n of h){r+=this._splitLine(null,i,a,t,n).length*a;if(r>e)return!0}return!1};c=Math.max(c,n);for(;;){o=e/c;s=roundWithTwoDigits(o/a);if(!isTooBig(s))break;c++}}const{fontName:l,fontColor:h}=this.data.defaultAppearanceData;this._defaultAppearance=function createDefaultAppearance({fontSize:e,fontName:t,fontColor:a}){return`/${escapePDFName(t)} ${e} Tf ${getPdfColor(a,!0)}`}({fontSize:s,fontName:l,fontColor:h})}return[this._defaultAppearance,s,e/c]}_renderText(e,t,a,r,i,n,s,o){let c;if(1===i){c=(r-this._getTextWidth(e,t)*a)/2}else if(2===i){c=r-this._getTextWidth(e,t)*a-s}else c=s;const l=numberToString(c-n.shift);n.shift=c;return`${l} ${o=numberToString(o)} Td (${escapeString(e)}) Tj`}_getSaveFieldResources(e){const{localResources:t,appearanceResources:a,acroFormResources:r}=this._fieldResources,i=this.data.defaultAppearanceData?.fontName;if(!i)return t||Dict.empty;for(const e of[t,a])if(e instanceof Dict){const t=e.get("Font");if(t instanceof Dict&&t.has(i))return e}if(r instanceof Dict){const a=r.get("Font");if(a instanceof Dict&&a.has(i)){const r=new Dict(e);r.set(i,a.getRaw(i));const n=new Dict(e);n.set("Font",r);return Dict.merge({xref:e,dictArray:[n,t],mergeSubDicts:!0})}}return t||Dict.empty}getFieldObject(){return null}}class TextWidgetAnnotation extends WidgetAnnotation{constructor(e){super(e);const{dict:t}=e;if(t.has("PMD")){this.flags|=E;this.data.hidden=!0;warn("Barcodes are not supported")}this.data.hasOwnCanvas=this.data.readOnly&&!this.data.noHTML;this._hasText=!0;"string"!=typeof this.data.fieldValue&&(this.data.fieldValue="");let a=getInheritableProperty({dict:t,key:"Q"});(!Number.isInteger(a)||a<0||a>2)&&(a=null);this.data.textAlignment=a;let r=getInheritableProperty({dict:t,key:"MaxLen"});(!Number.isInteger(r)||r<0)&&(r=0);this.data.maxLen=r;this.data.multiLine=this.hasFieldFlag(W);this.data.comb=this.hasFieldFlag(Z)&&!this.data.multiLine&&!this.data.password&&!this.hasFieldFlag(K)&&0!==this.data.maxLen;this.data.doNotScroll=this.hasFieldFlag(Y);const{data:{actions:i}}=this;if(!i)return;const n=/^AF(Date|Time)_(?:Keystroke|Format)(?:Ex)?\(['"]?([^'"]+)['"]?\);$/;let s=!1;(1===i.Format?.length&&1===i.Keystroke?.length&&n.test(i.Format[0])&&n.test(i.Keystroke[0])||0===i.Format?.length&&1===i.Keystroke?.length&&n.test(i.Keystroke[0])||0===i.Keystroke?.length&&1===i.Format?.length&&n.test(i.Format[0]))&&(s=!0);const o=[];i.Format&&o.push(...i.Format);i.Keystroke&&o.push(...i.Keystroke);if(s){delete i.Keystroke;i.Format=o}for(const e of o){const t=e.match(n);if(!t)continue;const a="Date"===t[1];let r=t[2];const i=parseInt(r,10);isNaN(i)||Math.floor(Math.log10(i))+1!==t[2].length||(r=(a?Cn:vn)[i]??r);this.data.datetimeFormat=r;if(!s)break;if(a){if(/HH|MM|ss|h/.test(r)){this.data.datetimeType="datetime-local";this.data.timeStep=/ss/.test(r)?1:60}else this.data.datetimeType="date";break}this.data.datetimeType="time";this.data.timeStep=/ss/.test(r)?1:60;break}}get hasTextContent(){return!!this.appearance&&!this._needAppearances}_getCombAppearance(e,t,a,r,i,n,s,o,c,l,h){const u=i/this.data.maxLen,d=this.getBorderAndBackgroundAppearances(h),f=[],g=t.getCharPositions(a);for(const[e,t]of g)f.push(`(${escapeString(a.substring(e,t))}) Tj`);const p=f.join(` ${numberToString(u)} 0 Td `);return`/Tx BMC q ${d}BT `+e+` 1 0 0 1 ${numberToString(s)} ${numberToString(o+c)} Tm ${p} ET Q EMC`}_getMultilineAppearance(e,t,a,r,i,n,s,o,c,l,h,u){const d=[],f=i-2*o,g={shift:0};for(let e=0,n=t.length;er){c.push(e.substring(d,a));d=a;f=p;l=-1;u=-1}else{f+=p;l=a;h=i;u=t}else if(f+p>r)if(-1!==l){c.push(e.substring(d,h));d=h;t=u+1;l=-1;f=0}else{c.push(e.substring(d,a));d=a;f=p}else f+=p}dt?`\\${t}`:"\\s+");new RegExp(`^\\s*${n}\\s*$`).test(this.data.fieldValue)&&(this.data.textContent=this.data.fieldValue.split("\n"))}getFieldObject(){return{id:this.data.id,value:this.data.fieldValue,defaultValue:this.data.defaultFieldValue||"",multiline:this.data.multiLine,password:this.data.password,charLimit:this.data.maxLen,comb:this.data.comb,editable:!this.data.readOnly,hidden:this.data.hidden,name:this.data.fieldName,rect:this.data.rect,actions:this.data.actions,page:this.data.pageIndex,strokeColor:this.data.borderColor,fillColor:this.data.backgroundColor,rotation:this.rotation,datetimeFormat:this.data.datetimeFormat,hasDatetimeHTML:!!this.data.datetimeType,type:"text"}}}class ButtonWidgetAnnotation extends WidgetAnnotation{constructor(e){super(e);this.checkedAppearance=null;this.uncheckedAppearance=null;const t=this.hasFieldFlag($),a=this.hasFieldFlag(z);this.data.checkBox=!t&&!a;this.data.radioButton=t&&!a;this.data.pushButton=a;this.data.isTooltipOnly=!1;if(this.data.checkBox)this._processCheckBox(e);else if(this.data.radioButton)this._processRadioButton(e);else if(this.data.pushButton){this.data.hasOwnCanvas=!0;this.data.noHTML=!1;this._processPushButton(e)}else warn("Invalid field flags for button widget annotation")}async getOperatorList(e,t,a,r){if(this.data.pushButton)return super.getOperatorList(e,t,a,!1,r);let i=null,n=null;if(r){const e=r.get(this.data.id);i=e?e.value:null;n=e?e.rotation:null}if(null===i&&this.appearance)return super.getOperatorList(e,t,a,r);null==i&&(i=this.data.checkBox?this.data.fieldValue===this.data.exportValue:this.data.fieldValue===this.data.buttonValue);const s=i?this.checkedAppearance:this.uncheckedAppearance;if(s){const i=this.appearance,o=lookupMatrix(s.dict.getArray("Matrix"),fa);n&&s.dict.set("Matrix",this.getRotationMatrix(r));this.appearance=s;const c=super.getOperatorList(e,t,a,r);this.appearance=i;s.dict.set("Matrix",o);return c}return{opList:new OperatorList,separateForm:!1,separateCanvas:!1}}async save(e,t,a,r){this.data.checkBox?this._saveCheckbox(e,t,a,r):this.data.radioButton&&this._saveRadioButton(e,t,a,r)}async _saveCheckbox(e,t,a,r){if(!a)return;const i=a.get(this.data.id),n=this._buildFlags(i?.noView,i?.noPrint);let s=i?.rotation,o=i?.value;if(void 0===s&&void 0===n){if(void 0===o)return;if(this.data.fieldValue===this.data.exportValue===o)return}let c=e.xref.fetchIfRef(this.ref);if(!(c instanceof Dict))return;c=c.clone();void 0===s&&(s=this.rotation);void 0===o&&(o=this.data.fieldValue===this.data.exportValue);const l={path:this.data.fieldName,value:o?this.data.exportValue:""},h=Name.get(o?this.data.exportValue:"Off");this.setValue(c,h,e.xref,r);c.set("AS",h);c.set("M",`D:${getModificationDate()}`);void 0!==n&&c.set("F",n);const u=this._getMKDict(s);u&&c.set("MK",u);r.put(this.ref,{data:c,xfa:l,needAppearances:!1})}async _saveRadioButton(e,t,a,r){if(!a)return;const i=a.get(this.data.id),n=this._buildFlags(i?.noView,i?.noPrint);let s=i?.rotation,o=i?.value;if(void 0===s&&void 0===n){if(void 0===o)return;if(this.data.fieldValue===this.data.buttonValue===o)return}let c=e.xref.fetchIfRef(this.ref);if(!(c instanceof Dict))return;c=c.clone();void 0===o&&(o=this.data.fieldValue===this.data.buttonValue);void 0===s&&(s=this.rotation);const l={path:this.data.fieldName,value:o?this.data.buttonValue:""},h=Name.get(o?this.data.buttonValue:"Off");o&&this.setValue(c,h,e.xref,r);c.set("AS",h);c.set("M",`D:${getModificationDate()}`);void 0!==n&&c.set("F",n);const u=this._getMKDict(s);u&&c.set("MK",u);r.put(this.ref,{data:c,xfa:l,needAppearances:!1})}_getDefaultCheckedAppearance(e,t){const{width:a,height:r}=this,i=[0,0,a,r],n=.8*Math.min(a,r);let s,o;if("check"===t){s={width:.755*n,height:.705*n};o="3"}else if("disc"===t){s={width:.791*n,height:.705*n};o="l"}else unreachable(`_getDefaultCheckedAppearance - unsupported type: ${t}`);const c=`q BT /PdfJsZaDb ${n} Tf 0 g ${numberToString((a-s.width)/2)} ${numberToString((r-s.height)/2)} Td (${o}) Tj ET Q`,l=new Dict(e.xref);l.set("FormType",1);l.setIfName("Subtype","Form");l.setIfName("Type","XObject");l.set("BBox",i);l.set("Matrix",[1,0,0,1,0,0]);l.set("Length",c.length);const h=new Dict(e.xref),u=new Dict(e.xref);u.set("PdfJsZaDb",this.fallbackFontDict);h.set("Font",u);l.set("Resources",h);this.checkedAppearance=new StringStream(c);this.checkedAppearance.dict=l;this._streams.push(this.checkedAppearance)}_processCheckBox(e){const t=e.dict.get("AP");if(!(t instanceof Dict))return;const a=t.get("N");if(!(a instanceof Dict))return;const r=this._decodeFormValue(e.dict.get("AS"));"string"==typeof r&&(this.data.fieldValue=r);const i=null!==this.data.fieldValue&&"Off"!==this.data.fieldValue?this.data.fieldValue:"Yes",n=this._decodeFormValue(a.getKeys());if(0===n.length)n.push("Off",i);else if(1===n.length)"Off"===n[0]?n.push(i):n.unshift("Off");else if(n.includes(i)){n.length=0;n.push("Off",i)}else{const e=n.find(e=>"Off"!==e);n.length=0;n.push("Off",e)}n.includes(this.data.fieldValue)||(this.data.fieldValue="Off");this.data.exportValue=n[1];const s=a.get(this.data.exportValue);this.checkedAppearance=s instanceof BaseStream?s:null;const o=a.get("Off");this.uncheckedAppearance=o instanceof BaseStream?o:null;this.checkedAppearance?this._streams.push(this.checkedAppearance):this._getDefaultCheckedAppearance(e,"check");this.uncheckedAppearance&&this._streams.push(this.uncheckedAppearance);this._fallbackFontDict=this.fallbackFontDict;null===this.data.defaultFieldValue&&(this.data.defaultFieldValue="Off")}_processRadioButton(e){this.data.buttonValue=null;const t=e.dict.get("Parent");if(t instanceof Dict){this.parent=e.dict.getRaw("Parent");const a=t.get("V");a instanceof Name&&(this.data.fieldValue=this._decodeFormValue(a))}const a=e.dict.get("AP");if(!(a instanceof Dict))return;const r=a.get("N");if(!(r instanceof Dict))return;for(const e of r.getKeys())if("Off"!==e){this.data.buttonValue=this._decodeFormValue(e);break}const i=r.get(this.data.buttonValue);this.checkedAppearance=i instanceof BaseStream?i:null;const n=r.get("Off");this.uncheckedAppearance=n instanceof BaseStream?n:null;this.checkedAppearance?this._streams.push(this.checkedAppearance):this._getDefaultCheckedAppearance(e,"disc");this.uncheckedAppearance&&this._streams.push(this.uncheckedAppearance);this._fallbackFontDict=this.fallbackFontDict;null===this.data.defaultFieldValue&&(this.data.defaultFieldValue="Off")}_processPushButton(e){const{dict:t,annotationGlobals:a}=e;if(t.has("A")||t.has("AA")||this.data.alternativeText){this.data.isTooltipOnly=!t.has("A")&&!t.has("AA");Catalog.parseDestDictionary({destDict:t,resultObj:this.data,docBaseUrl:a.baseUrl,docAttachments:a.attachments})}else warn("Push buttons without action dictionaries are not supported")}getFieldObject(){let e,t="button";if(this.data.checkBox){t="checkbox";e=this.data.exportValue}else if(this.data.radioButton){t="radiobutton";e=this.data.buttonValue}return{id:this.data.id,value:this.data.fieldValue||"Off",defaultValue:this.data.defaultFieldValue,exportValues:e,editable:!this.data.readOnly,name:this.data.fieldName,rect:this.data.rect,hidden:this.data.hidden,actions:this.data.actions,page:this.data.pageIndex,strokeColor:this.data.borderColor,fillColor:this.data.backgroundColor,rotation:this.rotation,type:t}}get fallbackFontDict(){const e=new Dict;e.setIfName("BaseFont","ZapfDingbats");e.setIfName("Type","FallbackType");e.setIfName("Subtype","FallbackType");e.setIfName("Encoding","ZapfDingbatsEncoding");return shadow(this,"fallbackFontDict",e)}}class ChoiceWidgetAnnotation extends WidgetAnnotation{constructor(e){super(e);const{dict:t,xref:a}=e;this.indices=t.getArray("I");this.hasIndices=Array.isArray(this.indices)&&this.indices.length>0;this.data.options=[];const r=getInheritableProperty({dict:t,key:"Opt"});if(Array.isArray(r))for(let e=0,t=r.length;e=0&&t0&&(this.data.options=this.data.fieldValue.map(e=>({exportValue:e,displayValue:e})));this.data.combo=this.hasFieldFlag(V);this.data.multiSelect=this.hasFieldFlag(J);this._hasText=!0}getFieldObject(){const e=this.data.combo?"combobox":"listbox",t=this.data.fieldValue.length>0?this.data.fieldValue[0]:null;return{id:this.data.id,value:t,defaultValue:this.data.defaultFieldValue,editable:!this.data.readOnly,name:this.data.fieldName,rect:this.data.rect,numItems:this.data.fieldValue.length,multipleSelection:this.data.multiSelect,hidden:this.data.hidden,actions:this.data.actions,items:this.data.options,page:this.data.pageIndex,strokeColor:this.data.borderColor,fillColor:this.data.backgroundColor,rotation:this.rotation,type:e}}amendSavedDict(e,t){if(!this.hasIndices)return;let a=e?.get(this.data.id)?.value;Array.isArray(a)||(a=[a]);const r=[],{options:i}=this.data;for(let e=0,t=0,n=i.length;ea){a=r;t=e}}[f,g]=this._computeFontSize(e,c-4,t,d,-1)}const p=g*a,m=(p-g)/2,b=Math.floor(l/p);let y=0;if(u.length>0){const e=Math.min(...u),t=Math.max(...u);y=Math.max(0,t-b+1);y>e&&(y=e)}const w=Math.min(y+b+1,h),S=["/Tx BMC q",`1 1 ${c} ${l} re W n`];if(u.length){S.push("0.600006 0.756866 0.854904 rg");for(const e of u)y<=e&&ee.trimEnd());const{coords:e,bbox:t,matrix:r}=FakeUnicodeFont.getFirstPositionInfo(this.rectangle,this.rotation,a);this.data.textPosition=this._transformPoint(e,t,r)}if(this._isOffscreenCanvasSupported){const i=e.dict.get("CA"),n=new FakeUnicodeFont(r,"sans-serif");this.appearance=n.createAppearance(this._contents.str,this.rectangle,this.rotation,a,t,i);this._streams.push(this.appearance)}else warn("FreeTextAnnotation: OffscreenCanvas is not supported, annotation may not render correctly.")}}get hasTextContent(){return this._hasAppearance}static createNewDict(e,t,{apRef:a,ap:r}){const{color:i,date:n,fontSize:s,oldAnnotation:o,rect:c,rotation:l,user:h,value:u}=e,d=o||new Dict(t);d.setIfNotExists("Type",Name.get("Annot"));d.setIfNotExists("Subtype",Name.get("FreeText"));d.set(o?"M":"CreationDate",`D:${getModificationDate(n)}`);o&&d.delete("RC");d.setIfArray("Rect",c);const f=`/Helv ${s} Tf ${getPdfColor(i,!0)}`;d.set("DA",f);d.setIfDefined("Contents",stringToAsciiOrUTF16BE(u));d.setIfNotExists("F",4);d.setIfNotExists("Border",[0,0,0]);d.setIfNumber("Rotate",l);d.setIfDefined("T",stringToAsciiOrUTF16BE(h));if(a||r){const e=new Dict(t);d.set("AP",e);e.set("N",a||r)}return d}static async createNewAppearanceStream(e,t,r){const{baseFontRef:i,evaluator:n,task:s}=r,{color:o,fontSize:c,rect:l,rotation:h,value:u}=e;if(!o)return null;const d=new Dict(t),f=new Dict(t);if(i)f.set("Helv",i);else{const e=new Dict(t);e.setIfName("BaseFont","Helvetica");e.setIfName("Type","Font");e.setIfName("Subtype","Type1");e.setIfName("Encoding","WinAnsiEncoding");f.set("Helv",e)}d.set("Font",f);const g=await WidgetAnnotation._getFontData(n,s,{fontName:"Helv",fontSize:c},d),[p,m,b,y]=l;let w=b-p,S=y-m;h%180!=0&&([w,S]=[S,w]);const x=u.split("\n"),k=c/1e3;let C=-1/0;const v=[];for(let e of x){const t=g.encodeString(e);if(t.length>1)return null;e=t.join("");v.push(e);let a=0;const r=g.charsToGlyphs(e);for(const e of r)a+=e.width*k;C=Math.max(C,a)}let F=1;C>w&&(F=w/C);let T=1;const O=a*c,D=1*c,M=O*x.length;M>S&&(T=S/M);const R=c*Math.min(F,T);let N,E,L;switch(h){case 0:L=[1,0,0,1];E=[l[0],l[1],w,S];N=[l[0],l[3]-D];break;case 90:L=[0,1,-1,0];E=[l[1],-l[2],w,S];N=[l[1],-l[0]-D];break;case 180:L=[-1,0,0,-1];E=[-l[2],-l[3],w,S];N=[-l[2],-l[1]-D];break;case 270:L=[0,-1,1,0];E=[-l[3],l[0],w,S];N=[-l[3],l[2]-D]}const _=["q",`${L.join(" ")} 0 0 cm`,`${E.join(" ")} re W n`,"BT",`${getPdfColor(o,!0)}`,`0 Tc /Helv ${numberToString(R)} Tf`];_.push(`${N.join(" ")} Td (${escapeString(v[0])}) Tj`);const U=numberToString(O);for(let e=1,t=v.length;e{e.push(`${r[0]} ${r[1]} m`,`${r[2]} ${r[3]} l`,"S");return[t[0]-o,t[7]-o,t[2]+o,t[3]+o]}})}}}class SquareAnnotation extends MarkupAnnotation{constructor(e){super(e);const{dict:t,xref:a}=e;this.data.annotationType=D.SQUARE;this.data.hasOwnCanvas=this.data.noRotate;this.data.noHTML=!1;if(!this.appearance){const e=getPdfColorArray(this.color,[0,0,0]),r=t.get("CA"),i=getPdfColorArray(getRgbColor(t.getArray("IC"),null)),n=i?r:null;if(0===this.borderStyle.width&&!i)return;this._setDefaultAppearance({xref:a,extra:`${this.borderStyle.width} w`,strokeColor:e,fillColor:i,strokeAlpha:r,fillAlpha:n,pointsCallback:(e,t)=>{const a=t[4]+this.borderStyle.width/2,r=t[5]+this.borderStyle.width/2,n=t[6]-t[4]-this.borderStyle.width,s=t[3]-t[7]-this.borderStyle.width;e.push(`${a} ${r} ${n} ${s} re`);i?e.push("B"):e.push("S");return[t[0],t[7],t[2],t[3]]}})}}}class CircleAnnotation extends MarkupAnnotation{constructor(e){super(e);const{dict:t,xref:a}=e;this.data.annotationType=D.CIRCLE;if(!this.appearance){const e=getPdfColorArray(this.color,[0,0,0]),r=t.get("CA"),i=getPdfColorArray(getRgbColor(t.getArray("IC"),null)),n=i?r:null;if(0===this.borderStyle.width&&!i)return;const s=4/3*Math.tan(Math.PI/8);this._setDefaultAppearance({xref:a,extra:`${this.borderStyle.width} w`,strokeColor:e,fillColor:i,strokeAlpha:r,fillAlpha:n,pointsCallback:(e,t)=>{const a=t[0]+this.borderStyle.width/2,r=t[1]-this.borderStyle.width/2,n=t[6]-this.borderStyle.width/2,o=t[7]+this.borderStyle.width/2,c=a+(n-a)/2,l=r+(o-r)/2,h=(n-a)/2*s,u=(o-r)/2*s;e.push(`${c} ${o} m`,`${c+h} ${o} ${n} ${l+u} ${n} ${l} c`,`${n} ${l-u} ${c+h} ${r} ${c} ${r} c`,`${c-h} ${r} ${a} ${l-u} ${a} ${l} c`,`${a} ${l+u} ${c-h} ${o} ${c} ${o} c`,"h");i?e.push("B"):e.push("S");return[t[0],t[7],t[2],t[3]]}})}}}class PolylineAnnotation extends MarkupAnnotation{constructor(e){super(e);const{dict:t,xref:a}=e;this.data.annotationType=D.POLYLINE;this.data.hasOwnCanvas=this.data.noRotate;this.data.noHTML=!1;this.data.vertices=null;if(!(this instanceof PolygonAnnotation)){this.setLineEndings(t.getArray("LE"));this.data.lineEndings=this.lineEndings}const r=t.getArray("Vertices");if(!isNumberArray(r,null))return;const i=this.data.vertices=Float32Array.from(r);if(!this.appearance){const e=getPdfColorArray(this.color,[0,0,0]),r=t.get("CA");let n,s=getRgbColor(t.getArray("IC"),null);s&&(s=getPdfColorArray(s));n=s?this.color?s.every((t,a)=>t===e[a])?"f":"B":"f":"S";const o=this.borderStyle.width||1,c=2*o,l=[1/0,1/0,-1/0,-1/0];for(let e=0,t=i.length;e{for(let t=0,a=i.length;t{for(const t of this.data.inkLists){for(let a=0,r=t.length;a0){const e=new Dict(t);g.set("BS",e);e.set("W",d)}g.setIfArray("C",getPdfColorArray(n));g.setIfNumber("CA",o);if(r||a){const e=new Dict(t);g.set("AP",e);e.set("N",a||r)}return g}static async createNewAppearanceStream(e,t,a){if(e.outlines)return this.createNewAppearanceStreamForHighlight(e,t,a);const{color:r,rect:i,paths:n,thickness:s,opacity:o}=e;if(!r)return null;const c=[`${s} w 1 J 1 j`,`${getPdfColor(r,!1)}`];1!==o&&c.push("/R0 gs");for(const e of n.lines){c.push(`${numberToString(e[4])} ${numberToString(e[5])} m`);for(let t=6,a=e.length;t{e.push(`${t[0]} ${t[1]} m`,`${t[2]} ${t[3]} l`,`${t[6]} ${t[7]} l`,`${t[4]} ${t[5]} l`,"f");return[t[0],t[7],t[2],t[3]]}})}}else this.data.popupRef=null}get overlaysTextContent(){return!0}static createNewDict(e,t,{apRef:a,ap:r}){const{color:i,date:n,oldAnnotation:s,opacity:o,rect:c,rotation:l,user:h,quadPoints:u}=e,d=s||new Dict(t);d.setIfNotExists("Type",Name.get("Annot"));d.setIfNotExists("Subtype",Name.get("Highlight"));d.set(s?"M":"CreationDate",`D:${getModificationDate(n)}`);d.setIfArray("Rect",c);d.setIfNotExists("F",4);d.setIfNotExists("Border",[0,0,0]);d.setIfNumber("Rotate",l);d.setIfArray("QuadPoints",u);d.setIfArray("C",getPdfColorArray(i));d.setIfNumber("CA",o);d.setIfDefined("T",stringToAsciiOrUTF16BE(h));if(a||r){const e=new Dict(t);d.set("AP",e);e.set("N",a||r)}return d}static async createNewAppearanceStream(e,t,a){const{color:r,rect:i,outlines:n,opacity:s}=e;if(!r)return null;const o=[`${getPdfColor(r,!0)}`,"/R0 gs"],c=[];for(const e of n){c.length=0;c.push(`${numberToString(e[0])} ${numberToString(e[1])} m`);for(let t=2,a=e.length;t{e.push(`${t[4]} ${t[5]+1.3} m`,`${t[6]} ${t[7]+1.3} l`,"S");return[t[0],t[7],t[2],t[3]]}})}}else this.data.popupRef=null}get overlaysTextContent(){return!0}}class SquigglyAnnotation extends MarkupAnnotation{constructor(e){super(e);const{dict:t,xref:a}=e;this.data.annotationType=D.SQUIGGLY;if(this.data.quadPoints=getQuadPoints(t,null)){if(!this.appearance){const e=getPdfColorArray(this.color,[0,0,0]),r=t.get("CA");this._setDefaultAppearance({xref:a,extra:"[] 0 d 1 w",strokeColor:e,strokeAlpha:r,pointsCallback:(e,t)=>{const a=(t[1]-t[5])/6;let r=a,i=t[4];const n=t[5],s=t[6];e.push(`${i} ${n+r} m`);do{i+=2;r=0===r?a:0;e.push(`${i} ${n+r} l`)}while(i{e.push((t[0]+t[4])/2+" "+(t[1]+t[5])/2+" m",(t[2]+t[6])/2+" "+(t[3]+t[7])/2+" l","S");return[t[0],t[7],t[2],t[3]]}})}}else this.data.popupRef=null}get overlaysTextContent(){return!0}}class StampAnnotation extends MarkupAnnotation{#Ne=null;constructor(e){super(e);this.data.annotationType=D.STAMP;this.data.hasOwnCanvas=this.data.noRotate;this.data.isEditable=!this.data.noHTML;this.data.noHTML=!1}mustBeViewedWhenEditing(e,t=null){if(e){if(!this.data.isEditable)return!0;this.#Ne??=this.data.hasOwnCanvas;this.data.hasOwnCanvas=!0;return!0}if(null!==this.#Ne){this.data.hasOwnCanvas=this.#Ne;this.#Ne=null}return!t?.has(this.data.id)}static async createImage(e,t){const{width:a,height:r}=e,i=new OffscreenCanvas(a,r),n=i.getContext("2d",{alpha:!0});n.drawImage(e,0,0);const s=n.getImageData(0,0,a,r).data,o=new Uint32Array(s.buffer),c=o.some(FeatureTest.isLittleEndian?e=>e>>>24!=255:e=>!!(255&~e));if(c){n.fillStyle="white";n.fillRect(0,0,a,r);n.drawImage(e,0,0)}const l=i.convertToBlob({type:"image/jpeg",quality:1}).then(e=>e.arrayBuffer()),h=Name.get("XObject"),u=Name.get("Image"),d=new Dict(t);d.set("Type",h);d.set("Subtype",u);d.set("BitsPerComponent",8);d.setIfName("ColorSpace","DeviceRGB");d.setIfName("Filter","DCTDecode");d.set("BBox",[0,0,a,r]);d.set("Width",a);d.set("Height",r);let f=null;if(c){const e=new Uint8Array(o.length);if(FeatureTest.isLittleEndian)for(let t=0,a=o.length;t>>24;else for(let t=0,a=o.length;t=0&&i<=1?i:null}}const rc={get r(){return shadow(this,"r",new Uint8Array([7,12,17,22,7,12,17,22,7,12,17,22,7,12,17,22,5,9,14,20,5,9,14,20,5,9,14,20,5,9,14,20,4,11,16,23,4,11,16,23,4,11,16,23,4,11,16,23,6,10,15,21,6,10,15,21,6,10,15,21,6,10,15,21]))},get k(){return shadow(this,"k",new Int32Array([-680876936,-389564586,606105819,-1044525330,-176418897,1200080426,-1473231341,-45705983,1770035416,-1958414417,-42063,-1990404162,1804603682,-40341101,-1502002290,1236535329,-165796510,-1069501632,643717713,-373897302,-701558691,38016083,-660478335,-405537848,568446438,-1019803690,-187363961,1163531501,-1444681467,-51403784,1735328473,-1926607734,-378558,-2022574463,1839030562,-35309556,-1530992060,1272893353,-155497632,-1094730640,681279174,-358537222,-722521979,76029189,-640364487,-421815835,530742520,-995338651,-198630844,1126891415,-1416354905,-57434055,1700485571,-1894986606,-1051523,-2054922799,1873313359,-30611744,-1560198380,1309151649,-145523070,-1120210379,718787259,-343485551]))}};function calculateMD5(e,t,a){let r=1732584193,i=-271733879,n=-1732584194,s=271733878;const o=a+72&-64,c=new Uint8Array(o);let l,h;for(l=0;l>5&255;c[l++]=a>>13&255;c[l++]=a>>21&255;c[l++]=a>>>29&255;l+=3;const d=new Int32Array(16),{k:f,r:g}=rc;for(l=0;l>>32-n)|0;a=r}r=r+a|0;i=i+o|0;n=n+u|0;s=s+p|0}return new Uint8Array([255&r,r>>8&255,r>>16&255,r>>>24&255,255&i,i>>8&255,i>>16&255,i>>>24&255,255&n,n>>8&255,n>>16&255,n>>>24&255,255&s,s>>8&255,s>>16&255,s>>>24&255])}function decodeString(e){try{return stringToUTF8String(e)}catch(t){warn(`UTF-8 decoding failed: "${t}".`);return e}}class DatasetXMLParser extends SimpleXMLParser{constructor(e){super(e);this.node=null}onEndElement(e){const t=super.onEndElement(e);if(t&&"xfa:datasets"===e){this.node=t;throw new Error("Aborting DatasetXMLParser.")}}}class DatasetReader{constructor(e){if(e.datasets)this.node=new SimpleXMLParser({hasAttributes:!0}).parseFromString(e.datasets).documentElement;else{const t=new DatasetXMLParser({hasAttributes:!0});try{t.parseFromString(e["xdp:xdp"])}catch{}this.node=t.node}}getValue(e){if(!this.node||!e)return"";const t=this.node.searchNode(parseXFAPath(e),0);if(!t)return"";const a=t.firstChild;return"value"===a?.nodeName?t.children.map(e=>decodeString(e.textContent)):decodeString(t.textContent)}}class SingleIntersector{#Ee;minX=1/0;minY=1/0;maxX=-1/0;maxY=-1/0;#Le=null;#_e=[];#Ue=[];#je=-1;#Xe=!1;constructor(e){this.#Ee=e;const t=e.data.quadPoints;if(t){for(let e=0,a=t.length;e8&&(this.#Le=t)}else[this.minX,this.minY,this.maxX,this.maxY]=e.data.rect}#qe(e,t){if(this.minX>=e||this.maxX<=e||this.minY>=t||this.maxY<=t)return!1;const a=this.#Le;if(!a)return!0;if(this.#je>=0){const r=this.#je;if(!(a[r]>=e||a[r+2]<=e||a[r+5]>=t||a[r+1]<=t))return!0;this.#je=-1}for(let r=0,i=a.length;r=e||a[r+2]<=e||a[r+5]>=t||a[r+1]<=t)){this.#je=r;return!0}return!1}addGlyph(e,t,a){if(!this.#qe(e,t)){this.disableExtraChars();return!1}if(this.#Ue.length>0){this.#_e.push(this.#Ue.join(""));this.#Ue.length=0}this.#_e.push(a);this.#Xe=!0;return!0}addExtraChar(e){this.#Xe&&this.#Ue.push(e)}disableExtraChars(){if(this.#Xe){this.#Xe=!1;this.#Ue.length=0}}setText(){this.#Ee.data.overlaidText=this.#_e.join("")}}const ic=64;class Intersector{#He=[];#We=[];#Ge;#$e;#ze;#Ve;#Ke;#Je;constructor(e){let t=1/0,a=1/0,r=-1/0,i=-1/0;const n=this.#He;for(const s of e){if(!s.data.quadPoints&&!s.data.rect)continue;const e=new SingleIntersector(s);n.push(e);t=Math.min(t,e.minX);a=Math.min(a,e.minY);r=Math.max(r,e.maxX);i=Math.max(i,e.maxY)}this.#Ge=t;this.#ze=a;this.#$e=r;this.#Ve=i;this.#Ke=63/(r-t);this.#Je=63/(i-a);for(const e of n){const t=this.#Ye(e.minX,e.minY),a=this.#Ye(e.maxX,e.maxY),r=(a-t)%ic,i=Math.floor((a-t)/ic);for(let a=t;a<=t+i*ic;a+=ic)for(let t=0;t<=r;t++){let r=this.#We[a+t];r||(this.#We[a+t]=r=[]);r.push(e)}}}#Ye(e,t){return Math.floor((e-this.#Ge)*this.#Ke)+Math.floor((t-this.#ze)*this.#Je)*ic}addGlyph(e,t,a,r){const i=e[4]+t/2,n=e[5]+a/2;if(ithis.#$e||n>this.#Ve)return;const s=this.#We[this.#Ye(i,n)];if(s)for(const e of s)e.addGlyph(i,n,r)}addExtraChar(e){for(const t of this.#He)t.addExtraChar(e)}setText(){for(const e of this.#He)e.setText()}}class Word64{constructor(e,t){this.high=0|e;this.low=0|t}and(e){this.high&=e.high;this.low&=e.low}xor(e){this.high^=e.high;this.low^=e.low}shiftRight(e){if(e>=32){this.low=this.high>>>e-32|0;this.high=0}else{this.low=this.low>>>e|this.high<<32-e;this.high=this.high>>>e|0}}rotateRight(e){let t,a;if(32&e){a=this.low;t=this.high}else{t=this.low;a=this.high}e&=31;this.low=t>>>e|a<<32-e;this.high=a>>>e|t<<32-e}not(){this.high=~this.high;this.low=~this.low}add(e){const t=(this.low>>>0)+(e.low>>>0);let a=(this.high>>>0)+(e.high>>>0);t>4294967295&&(a+=1);this.low=0|t;this.high=0|a}copyTo(e,t){e[t]=this.high>>>24&255;e[t+1]=this.high>>16&255;e[t+2]=this.high>>8&255;e[t+3]=255&this.high;e[t+4]=this.low>>>24&255;e[t+5]=this.low>>16&255;e[t+6]=this.low>>8&255;e[t+7]=255&this.low}assign(e){this.high=e.high;this.low=e.low}}const nc={get k(){return shadow(this,"k",[new Word64(1116352408,3609767458),new Word64(1899447441,602891725),new Word64(3049323471,3964484399),new Word64(3921009573,2173295548),new Word64(961987163,4081628472),new Word64(1508970993,3053834265),new Word64(2453635748,2937671579),new Word64(2870763221,3664609560),new Word64(3624381080,2734883394),new Word64(310598401,1164996542),new Word64(607225278,1323610764),new Word64(1426881987,3590304994),new Word64(1925078388,4068182383),new Word64(2162078206,991336113),new Word64(2614888103,633803317),new Word64(3248222580,3479774868),new Word64(3835390401,2666613458),new Word64(4022224774,944711139),new Word64(264347078,2341262773),new Word64(604807628,2007800933),new Word64(770255983,1495990901),new Word64(1249150122,1856431235),new Word64(1555081692,3175218132),new Word64(1996064986,2198950837),new Word64(2554220882,3999719339),new Word64(2821834349,766784016),new Word64(2952996808,2566594879),new Word64(3210313671,3203337956),new Word64(3336571891,1034457026),new Word64(3584528711,2466948901),new Word64(113926993,3758326383),new Word64(338241895,168717936),new Word64(666307205,1188179964),new Word64(773529912,1546045734),new Word64(1294757372,1522805485),new Word64(1396182291,2643833823),new Word64(1695183700,2343527390),new Word64(1986661051,1014477480),new Word64(2177026350,1206759142),new Word64(2456956037,344077627),new Word64(2730485921,1290863460),new Word64(2820302411,3158454273),new Word64(3259730800,3505952657),new Word64(3345764771,106217008),new Word64(3516065817,3606008344),new Word64(3600352804,1432725776),new Word64(4094571909,1467031594),new Word64(275423344,851169720),new Word64(430227734,3100823752),new Word64(506948616,1363258195),new Word64(659060556,3750685593),new Word64(883997877,3785050280),new Word64(958139571,3318307427),new Word64(1322822218,3812723403),new Word64(1537002063,2003034995),new Word64(1747873779,3602036899),new Word64(1955562222,1575990012),new Word64(2024104815,1125592928),new Word64(2227730452,2716904306),new Word64(2361852424,442776044),new Word64(2428436474,593698344),new Word64(2756734187,3733110249),new Word64(3204031479,2999351573),new Word64(3329325298,3815920427),new Word64(3391569614,3928383900),new Word64(3515267271,566280711),new Word64(3940187606,3454069534),new Word64(4118630271,4000239992),new Word64(116418474,1914138554),new Word64(174292421,2731055270),new Word64(289380356,3203993006),new Word64(460393269,320620315),new Word64(685471733,587496836),new Word64(852142971,1086792851),new Word64(1017036298,365543100),new Word64(1126000580,2618297676),new Word64(1288033470,3409855158),new Word64(1501505948,4234509866),new Word64(1607167915,987167468),new Word64(1816402316,1246189591)])}};function ch(e,t,a,r,i){e.assign(t);e.and(a);i.assign(t);i.not();i.and(r);e.xor(i)}function maj(e,t,a,r,i){e.assign(t);e.and(a);i.assign(t);i.and(r);e.xor(i);i.assign(a);i.and(r);e.xor(i)}function sigma(e,t,a){e.assign(t);e.rotateRight(28);a.assign(t);a.rotateRight(34);e.xor(a);a.assign(t);a.rotateRight(39);e.xor(a)}function sigmaPrime(e,t,a){e.assign(t);e.rotateRight(14);a.assign(t);a.rotateRight(18);e.xor(a);a.assign(t);a.rotateRight(41);e.xor(a)}function littleSigma(e,t,a){e.assign(t);e.rotateRight(1);a.assign(t);a.rotateRight(8);e.xor(a);a.assign(t);a.shiftRight(7);e.xor(a)}function littleSigmaPrime(e,t,a){e.assign(t);e.rotateRight(19);a.assign(t);a.rotateRight(61);e.xor(a);a.assign(t);a.shiftRight(6);e.xor(a)}function calculateSHA512(e,t,a,r=!1){let i,n,s,o,c,l,h,u;if(r){i=new Word64(3418070365,3238371032);n=new Word64(1654270250,914150663);s=new Word64(2438529370,812702999);o=new Word64(355462360,4144912697);c=new Word64(1731405415,4290775857);l=new Word64(2394180231,1750603025);h=new Word64(3675008525,1694076839);u=new Word64(1203062813,3204075428)}else{i=new Word64(1779033703,4089235720);n=new Word64(3144134277,2227873595);s=new Word64(1013904242,4271175723);o=new Word64(2773480762,1595750129);c=new Word64(1359893119,2917565137);l=new Word64(2600822924,725511199);h=new Word64(528734635,4215389547);u=new Word64(1541459225,327033209)}const d=128*Math.ceil((a+17)/128),f=new Uint8Array(d);let g,p;for(g=0;g>>29&255;f[g++]=a>>21&255;f[g++]=a>>13&255;f[g++]=a>>5&255;f[g++]=a<<3&255;const b=new Array(80);for(g=0;g<80;g++)b[g]=new Word64(0,0);const{k:y}=nc;let w=new Word64(0,0),S=new Word64(0,0),x=new Word64(0,0),k=new Word64(0,0),C=new Word64(0,0),v=new Word64(0,0),F=new Word64(0,0),T=new Word64(0,0);const O=new Word64(0,0),D=new Word64(0,0),M=new Word64(0,0),R=new Word64(0,0);let N,E;for(g=0;g>>t|e<<32-t}function calculate_sha256_ch(e,t,a){return e&t^~e&a}function calculate_sha256_maj(e,t,a){return e&t^e&a^t&a}function calculate_sha256_sigma(e){return rotr(e,2)^rotr(e,13)^rotr(e,22)}function calculate_sha256_sigmaPrime(e){return rotr(e,6)^rotr(e,11)^rotr(e,25)}function calculate_sha256_littleSigma(e){return rotr(e,7)^rotr(e,18)^e>>>3}function calculate_sha256_littleSigmaPrime(e){return rotr(e,17)^rotr(e,19)^e>>>10}function calculateSHA256(e,t,a){let r=1779033703,i=3144134277,n=1013904242,s=2773480762,o=1359893119,c=2600822924,l=528734635,h=1541459225;const u=64*Math.ceil((a+9)/64),d=new Uint8Array(u);let f,g;for(f=0;f>>29&255;d[f++]=a>>21&255;d[f++]=a>>13&255;d[f++]=a>>5&255;d[f++]=a<<3&255;const m=new Uint32Array(64),{k:b}=sc;for(f=0;f>24&255,r>>16&255,r>>8&255,255&r,i>>24&255,i>>16&255,i>>8&255,255&i,n>>24&255,n>>16&255,n>>8&255,255&n,s>>24&255,s>>16&255,s>>8&255,255&s,o>>24&255,o>>16&255,o>>8&255,255&o,c>>24&255,c>>16&255,c>>8&255,255&c,l>>24&255,l>>16&255,l>>8&255,255&l,h>>24&255,h>>16&255,h>>8&255,255&h])}class DecryptStream extends DecodeStream{constructor(e,t,a){super(t);this.stream=e;this.dict=e.dict;this.decrypt=a;this.nextChunk=null;this.initialized=!1}readBlock(){let e;if(this.initialized)e=this.nextChunk;else{e=this.stream.getBytes(512);this.initialized=!0}if(!e?.length){this.eof=!0;return}this.nextChunk=this.stream.getBytes(512);const t=this.nextChunk?.length>0;e=(0,this.decrypt)(e,!t);const a=this.bufferLength,r=a+e.length;this.ensureBuffer(r).set(e,a);this.bufferLength=r}getOriginalStream(){return this}}class ARCFourCipher{constructor(e){this.a=0;this.b=0;const t=new Uint8Array(256),a=e.length;for(let e=0;e<256;++e)t[e]=e;for(let r=0,i=0;r<256;++r){const n=t[r];i=i+n+e[r%a]&255;t[r]=t[i];t[i]=n}this.s=t}encryptBlock(e){let t=this.a,a=this.b;const r=this.s,i=e.length,n=new Uint8Array(i);for(let s=0;st<128?t<<1:t<<1^27);constructor(){this.buffer=new Uint8Array(16);this.bufferPosition=0}_expandKey(e){unreachable("Cannot call `_expandKey` on the base class")}_decrypt(e,t){let a,r,i;const n=new Uint8Array(16);n.set(e);for(let e=0,a=this._keySize;e<16;++e,++a)n[e]^=t[a];for(let e=this._cyclesOfRepetition-1;e>=1;--e){a=n[13];n[13]=n[9];n[9]=n[5];n[5]=n[1];n[1]=a;a=n[14];r=n[10];n[14]=n[6];n[10]=n[2];n[6]=a;n[2]=r;a=n[15];r=n[11];i=n[7];n[15]=n[3];n[11]=a;n[7]=r;n[3]=i;for(let e=0;e<16;++e)n[e]=this._inv_s[n[e]];for(let a=0,r=16*e;a<16;++a,++r)n[a]^=t[r];for(let e=0;e<16;e+=4){const t=this._mix[n[e]],r=this._mix[n[e+1]],i=this._mix[n[e+2]],s=this._mix[n[e+3]];a=t^r>>>8^r<<24^i>>>16^i<<16^s>>>24^s<<8;n[e]=a>>>24&255;n[e+1]=a>>16&255;n[e+2]=a>>8&255;n[e+3]=255&a}}a=n[13];n[13]=n[9];n[9]=n[5];n[5]=n[1];n[1]=a;a=n[14];r=n[10];n[14]=n[6];n[10]=n[2];n[6]=a;n[2]=r;a=n[15];r=n[11];i=n[7];n[15]=n[3];n[11]=a;n[7]=r;n[3]=i;for(let e=0;e<16;++e){n[e]=this._inv_s[n[e]];n[e]^=t[e]}return n}_encrypt(e,t){const a=this._s;let r,i,n;const s=new Uint8Array(16);s.set(e);for(let e=0;e<16;++e)s[e]^=t[e];for(let e=1;e=r;--a)if(e[a]!==t){t=0;break}o-=t;n[n.length-1]=e.subarray(0,16-t)}}const c=new Uint8Array(o);for(let e=0,t=0,a=n.length;e=256&&(o=255&(27^o))}for(let t=0;t<4;++t){a[e]=r^=a[e-32];e++;a[e]=i^=a[e-32];e++;a[e]=n^=a[e-32];e++;a[e]=s^=a[e-32];e++}}return a}}class PDFBase{_hash(e,t,a){unreachable("Abstract method `_hash` called")}checkOwnerPassword(e,t,a,r){const i=new Uint8Array(e.length+56);i.set(e,0);i.set(t,e.length);i.set(a,e.length+t.length);return isArrayEqual(this._hash(e,i,a),r)}checkUserPassword(e,t,a){const r=new Uint8Array(e.length+8);r.set(e,0);r.set(t,e.length);return isArrayEqual(this._hash(e,r,[]),a)}getOwnerKey(e,t,a,r){const i=new Uint8Array(e.length+56);i.set(e,0);i.set(t,e.length);i.set(a,e.length+t.length);const n=this._hash(e,i,a);return new AES256Cipher(n).decryptBlock(r,!1,new Uint8Array(16))}getUserKey(e,t,a){const r=new Uint8Array(e.length+8);r.set(e,0);r.set(t,e.length);const i=this._hash(e,r,[]);return new AES256Cipher(i).decryptBlock(a,!1,new Uint8Array(16))}}class PDF17 extends PDFBase{_hash(e,t,a){return calculateSHA256(t,0,t.length)}}class PDF20 extends PDFBase{_hash(e,t,a){let r=calculateSHA256(t,0,t.length).subarray(0,32),i=[0],n=0;for(;n<64||i.at(-1)>n-32;){const t=e.length+r.length+a.length,s=new Uint8Array(t);let o=0;s.set(e,o);o+=e.length;s.set(r,o);o+=r.length;s.set(a,o);const c=new Uint8Array(64*t);for(let e=0,a=0;e<64;e++,a+=t)c.set(s,a);i=new AES128Cipher(r.subarray(0,16)).encrypt(c,r.subarray(16,32));const l=Math.sumPrecise(i.slice(0,16))%3;0===l?r=calculateSHA256(i,0,i.length):1===l?r=calculateSHA384(i,0,i.length):2===l&&(r=calculateSHA512(i,0,i.length));n++}return r.subarray(0,32)}}class CipherTransform{constructor(e,t){this.StringCipherConstructor=e;this.StreamCipherConstructor=t}createStream(e,t){const a=new this.StreamCipherConstructor;return new DecryptStream(e,t,function cipherTransformDecryptStream(e,t){return a.decryptBlock(e,t)})}decryptString(e){const t=new this.StringCipherConstructor;let a=stringToBytes(e);a=t.decryptBlock(a,!0);return bytesToString(a)}encryptString(e){const t=new this.StringCipherConstructor;if(t instanceof AESBaseCipher){const a=16-e.length%16;e+=String.fromCharCode(a).repeat(a);const r=new Uint8Array(16);crypto.getRandomValues(r);let i=stringToBytes(e);i=t.encrypt(i,r);const n=new Uint8Array(16+i.length);n.set(r);n.set(i,16);return bytesToString(n)}let a=stringToBytes(e);a=t.encrypt(a);return bytesToString(a)}}class CipherTransformFactory{static get _defaultPasswordBytes(){return shadow(this,"_defaultPasswordBytes",new Uint8Array([40,191,78,94,78,117,138,65,100,0,78,86,255,250,1,8,46,46,0,182,208,104,62,128,47,12,169,254,100,83,105,122]))}#Ze(e,t,a,r,i,n,s,o,c,l,h,u){if(t){const e=Math.min(127,t.length);t=t.subarray(0,e)}else t=[];const d=6===e?new PDF20:new PDF17;return d.checkUserPassword(t,o,s)?d.getUserKey(t,c,h):t.length&&d.checkOwnerPassword(t,r,n,a)?d.getOwnerKey(t,i,n,l):null}#Qe(e,t,a,r,i,n,s,o){const c=40+a.length+e.length,l=new Uint8Array(c);let h,u,d=0;if(t){u=Math.min(32,t.length);for(;d>8&255;l[d++]=i>>16&255;l[d++]=i>>>24&255;l.set(e,d);d+=e.length;if(n>=4&&!o){l.fill(255,d,d+4);d+=4}let f=calculateMD5(l,0,d);const g=s>>3;if(n>=3)for(h=0;h<50;++h)f=calculateMD5(f,0,g);const p=f.subarray(0,g);let m,b;if(n>=3){d=0;l.set(CipherTransformFactory._defaultPasswordBytes,d);d+=32;l.set(e,d);d+=e.length;m=new ARCFourCipher(p);b=m.encryptBlock(calculateMD5(l,0,d));u=p.length;const t=new Uint8Array(u);for(h=1;h<=19;++h){for(let e=0;er[t]===e)?p:null}#et(e,t,a,r){const i=new Uint8Array(32);let n=0;const s=Math.min(32,e.length);for(;n>3;if(a>=3)for(o=0;o<50;++o)c=calculateMD5(c,0,c.length);let h,u;if(a>=3){u=t;const e=new Uint8Array(l);for(o=19;o>=0;o--){for(let t=0;t>8&255;n[s++]=e>>16&255;n[s++]=255&t;n[s++]=t>>8&255;if(r){n[s++]=115;n[s++]=65;n[s++]=108;n[s++]=84}return calculateMD5(n,0,s).subarray(0,Math.min(i+5,16))}#at(e,t,a,r,i){if(!(t instanceof Name))throw new FormatError("Invalid crypt filter name.");const n=this,s=e.get(t.name),o=s?.get("CFM");if(!o||"None"===o.name)return function(){return new NullCipher};if("V2"===o.name)return function(){return new ARCFourCipher(n.#tt(a,r,i,!1))};if("AESV2"===o.name)return function(){return new AES128Cipher(n.#tt(a,r,i,!0))};if("AESV3"===o.name)return function(){return new AES256Cipher(i)};throw new FormatError("Unknown crypto method")}constructor(e,t,a){const r=e.get("Filter");if(!isName(r,"Standard"))throw new FormatError("unknown encryption method");this.filterName=r.name;this.dict=e;const i=e.get("V");if(!Number.isInteger(i)||1!==i&&2!==i&&4!==i&&5!==i)throw new FormatError("unsupported encryption algorithm");this.algorithm=i;let n=e.get("Length");if(!n)if(i<=3)n=40;else{const t=e.get("CF"),a=e.get("StmF");if(t instanceof Dict&&a instanceof Name){t.suppressEncryption=!0;const e=t.get(a.name);n=e?.get("Length")||128;n<40&&(n<<=3)}}if(!Number.isInteger(n)||n<40||n%8!=0)throw new FormatError("invalid key length");const s=stringToBytes(e.get("O")),o=stringToBytes(e.get("U")),c=s.subarray(0,32),l=o.subarray(0,32),h=e.get("P"),u=e.get("R"),d=(4===i||5===i)&&!1!==e.get("EncryptMetadata");this.encryptMetadata=d;const f=stringToBytes(t);let g,p;if(a){if(6===u)try{a=utf8StringToString(a)}catch{warn("CipherTransformFactory: Unable to convert UTF8 encoded password.")}g=stringToBytes(a)}if(5!==i)p=this.#Qe(f,g,c,l,h,u,n,d);else{const t=s.subarray(32,40),a=s.subarray(40,48),r=o.subarray(0,48),i=o.subarray(32,40),n=o.subarray(40,48),h=stringToBytes(e.get("OE")),d=stringToBytes(e.get("UE")),f=stringToBytes(e.get("Perms"));p=this.#Ze(u,g,c,t,a,r,l,i,n,h,d,f)}if(!p){if(!a)throw new PasswordException("No password given",Yt);const e=this.#et(g,c,u,n);p=this.#Qe(f,e,c,l,h,u,n,d)}if(!p)throw new PasswordException("Incorrect Password",Zt);if(4===i&&p.length<16){this.encryptionKey=new Uint8Array(16);this.encryptionKey.set(p)}else this.encryptionKey=p;if(i>=4){const t=e.get("CF");t instanceof Dict&&(t.suppressEncryption=!0);this.cf=t;this.stmf=e.get("StmF")||Name.get("Identity");this.strf=e.get("StrF")||Name.get("Identity");this.eff=e.get("EFF")||this.stmf}}createCipherTransform(e,t){if(4===this.algorithm||5===this.algorithm)return new CipherTransform(this.#at(this.cf,this.strf,e,t,this.encryptionKey),this.#at(this.cf,this.stmf,e,t,this.encryptionKey));const a=this.#tt(e,t,this.encryptionKey,!1),cipherConstructor=function(){return new ARCFourCipher(a)};return new CipherTransform(cipherConstructor,cipherConstructor)}}class XRef{constructor(e,t){this.stream=e;this.pdfManager=t;this.entries=[];this._xrefStms=new Set;this._cacheMap=new Map;this._pendingRefs=new RefSet;this._newPersistentRefNum=null;this._newTemporaryRefNum=null;this._persistentRefsCache=null}getNewPersistentRef(e){null===this._newPersistentRefNum&&(this._newPersistentRefNum=this.entries.length||1);const t=this._newPersistentRefNum++;this._cacheMap.set(t,e);return Ref.get(t,0)}getNewTemporaryRef(){if(null===this._newTemporaryRefNum){this._newTemporaryRefNum=this.entries.length||1;if(this._newPersistentRefNum){this._persistentRefsCache=new Map;for(let e=this._newTemporaryRefNum;e0;){const[s,o]=n;if(!Number.isInteger(s)||!Number.isInteger(o))throw new FormatError(`Invalid XRef range fields: ${s}, ${o}`);if(!Number.isInteger(a)||!Number.isInteger(r)||!Number.isInteger(i))throw new FormatError(`Invalid XRef entry fields length: ${s}, ${o}`);for(let n=t.entryNum;n=e.length);){a+=String.fromCharCode(r);r=e[t]}return a}function skipUntil(e,t,a){const r=a.length,i=e.length;let n=0;for(;t=r)break;t++;n++}return n}const e=/\b(endobj|\d+\s+\d+\s+obj|xref|trailer\s*<<)\b/g,t=/\b(startxref|\d+\s+\d+\s+obj)\b/g,a=/^(\d+)\s+(\d+)\s+obj\b/,r=new Uint8Array([116,114,97,105,108,101,114]),i=new Uint8Array([115,116,97,114,116,120,114,101,102]),n=new Uint8Array([47,88,82,101,102]);this.entries.length=0;this._cacheMap.clear();const s=this.stream;s.pos=0;const o=s.getBytes(),c=bytesToString(o),l=o.length;let h=s.start;const u=[],d=[];for(;h=l)break;f=o[h]}while(10!==f&&13!==f);continue}const g=readToken(o,h);let p;if(g.startsWith("xref")&&(4===g.length||/\s/.test(g[4]))){h+=skipUntil(o,h,r);u.push(h);h+=skipUntil(o,h,i)}else if(p=a.exec(g)){const t=0|p[1],a=0|p[2],r=h+g.length;let i,u=!1;if(this.entries[t]){if(this.entries[t].gen===a)try{new Parser({lexer:new Lexer(s.makeSubStream(r))}).getObj();u=!0}catch(e){e instanceof ParserEOFException?warn(`indexObjects -- checking object (${g}): "${e}".`):u=!0}}else u=!0;u&&(this.entries[t]={offset:h-s.start,gen:a,uncompressed:!0});e.lastIndex=r;const f=e.exec(c);if(f){i=e.lastIndex+1-h;if("endobj"!==f[1]){warn(`indexObjects: Found "${f[1]}" inside of another "obj", caused by missing "endobj" -- trying to recover.`);i-=f[1].length+1}}else i=l-h;const m=o.subarray(h,h+i),b=skipUntil(m,0,n);if(b0&&t[3]-t[1]>0)return t;warn(`Empty, or invalid, /${e} entry.`)}return null}get mediaBox(){return shadow(this,"mediaBox",this.getBoundingBox("MediaBox")||oc)}get cropBox(){return shadow(this,"cropBox",this.getBoundingBox("CropBox")||this.mediaBox)}get userUnit(){const e=this.pageDict.get("UserUnit");return shadow(this,"userUnit","number"==typeof e&&e>0?e:1)}get view(){const{cropBox:e,mediaBox:t}=this;if(e!==t&&!isArrayEqual(e,t)){const a=Util.intersect(e,t);if(a&&a[2]-a[0]>0&&a[3]-a[1]>0)return shadow(this,"view",a);warn("Empty /CropBox and /MediaBox intersection.")}return shadow(this,"view",t)}get rotate(){let e=this.#st("Rotate")||0;e%90!=0?e=0:e>=360?e%=360:e<0&&(e=(e%360+360)%360);return shadow(this,"rotate",e)}#ot(e,t){if(!this.evaluatorOptions.ignoreErrors)throw e;warn(`getContentStream - ignoring sub-stream (${t}): "${e}".`)}async getContentStream(){const e=await this.pdfManager.ensure(this,"content");if(e instanceof BaseStream&&!e.isImageStream){if(e.isAsync){const t=await e.asyncGetBytes();if(t)return new Stream(t,0,t.length,e.dict)}return e}if(Array.isArray(e)){const t=[];for(let a=0,r=e.length;a{t&&(e[a]=new Stream(t,0,t.length,r.dict))}))}t.length>0&&await Promise.all(t);return new StreamsSequenceStream(e,this.#ot.bind(this))}return new NullStream}get xfaData(){return shadow(this,"xfaData",this.xfaFactory?{bbox:this.xfaFactory.getBoundingBox(this.pageIndex)}:null)}async#ct(e,t,a){const r=[];for(const i of e)if(i.id){const e=Ref.fromString(i.id);if(!e){warn(`A non-linked annotation cannot be modified: ${i.id}`);continue}if(i.deleted){t.put(e,e);if(i.popupRef){const e=Ref.fromString(i.popupRef);e&&t.put(e,e)}continue}if(i.popup?.deleted){const e=Ref.fromString(i.popupRef);e&&t.put(e,e)}a?.put(e);i.ref=e;r.push(this.xref.fetchAsync(e).then(e=>{e instanceof Dict&&(i.oldAnnotation=e.clone())},()=>{warn(`Cannot fetch \`oldAnnotation\` for: ${e}.`)}));delete i.id}await Promise.all(r)}async saveNewAnnotations(e,t,a,r,i){if(this.xfaFactory)throw new Error("XFA: Cannot save new annotations.");const n=this.#nt(e),s=new RefSetCache,o=new RefSet;await this.#ct(a,s,o);const c=this.pageDict,l=this.annotations.filter(e=>!(e instanceof Ref&&s.has(e))),h=await AnnotationFactory.saveNewAnnotations(n,t,a,r,i);for(const{ref:e}of h.annotations)e instanceof Ref&&!o.has(e)&&l.push(e);const u=c.clone();u.set("Annots",l);i.put(this.ref,{data:u});for(const e of s)i.put(e,{data:null})}async save(e,t,a,r){const i=this.#nt(e),n=await this._parsedAnnotations,s=[];for(const e of n)s.push(e.save(i,t,a,r).catch(function(e){warn(`save - ignoring annotation data during "${t.name}" task: "${e}".`);return null}));return Promise.all(s)}async loadResources(e){await(this.#it??=this.pdfManager.ensure(this,"resources"));await ObjectLoader.load(this.resources,e,this.xref)}async#lt(e,t){const a=e?.get("Resources");if(!(a instanceof Dict&&a.size))return this.resources;await ObjectLoader.load(a,t,this.xref);return Dict.merge({xref:this.xref,dictArray:[a,this.resources],mergeSubDicts:!0})}async getOperatorList({handler:e,sink:t,task:a,intent:r,cacheKey:i,pageId:c=this.pageIndex,pageIndex:d=this.pageIndex,annotationStorage:g=null,modifiedIds:p=null}){const m=this.getContentStream(),b=this.loadResources(ga),y=this.#nt(e),w=this.xfaFactory?null:getNewAnnotationsMap(g),S=w?.get(this.pageIndex);let x=Promise.resolve(null),k=null;if(S){const e=this.pdfManager.ensureDoc("annotationGlobals");let t;const r=new Set;for(const{bitmapId:e,bitmap:t}of S)!e||t||r.has(e)||r.add(e);const{isOffscreenCanvasSupported:i}=this.evaluatorOptions;if(r.size>0){const e=S.slice();for(const[t,a]of g)t.startsWith(f)&&a.bitmap&&r.has(a.bitmapId)&&e.push(a);t=AnnotationFactory.generateImages(e,this.xref,i)}else t=AnnotationFactory.generateImages(S,this.xref,i);k=new RefSet;x=Promise.all([e,this.#ct(S,k,null)]).then(([e])=>e?AnnotationFactory.printNewAnnotations(e,y,a,S,t):null)}const C=Promise.all([m,b]).then(async([n])=>{const s=await this.#lt(n.dict,ga),o=new OperatorList(r,t);e.send("StartRenderPage",{transparency:y.hasBlendModes(s,this.nonBlendModesSet),pageIndex:d,cacheKey:i});await y.getOperatorList({stream:n,task:a,resources:s,operatorList:o});return o});let[v,F,T]=await Promise.all([C,this._parsedAnnotations,x]);if(T){F=F.filter(e=>!(e.ref&&k.has(e.ref)));for(let e=0,t=T.length;ee.ref&&isRefsEqual(e.ref,a.refToReplace));if(r>=0){F.splice(r,1,a);T.splice(e--,1);t--}}}F=F.concat(T)}if(0===F.length||r&h){v.flush(!0);return{length:v.totalLength}}const O=!!(r&l),D=!!(r&u),M=!!(r&n),R=!!(r&s),N=!!(r&o),E=[];for(const e of F)(M||R&&e.mustBeViewed(g,O)&&e.mustBeViewedWhenEditing(D,p)||N&&e.mustBePrinted(g))&&E.push(e.getOperatorList(y,a,r,g).catch(function(e){warn(`getOperatorList - ignoring annotation data during "${a.name}" task: "${e}".`);return{opList:null,separateForm:!1,separateCanvas:!1}}));const L=await Promise.all(E);let _=!1,U=!1;for(const{opList:e,separateForm:t,separateCanvas:a}of L){v.addOpList(e);_||=t;U||=a}v.flush(!0,{form:_,canvas:U});return{length:v.totalLength}}async extractTextContent({handler:e,task:t,includeMarkedContent:a,disableNormalization:r,sink:i,intersector:n=null}){const s=this.getContentStream(),o=this.loadResources(pa),c=this.pdfManager.ensureCatalog("lang"),[l,,h]=await Promise.all([s,o,c]),u=await this.#lt(l.dict,pa);return this.#nt(e).getTextContent({stream:l,task:t,resources:u,includeMarkedContent:a,disableNormalization:r,sink:i,viewBox:this.view,lang:h,intersector:n})}async getStructTree(){const e=await this.pdfManager.ensureCatalog("structTreeRoot");if(!e)return null;await this._parsedAnnotations;try{const t=await this.pdfManager.ensure(this,"_parseStructTree",[e]);return await this.pdfManager.ensure(t,"serializable")}catch(e){warn(`getStructTree: "${e}".`);return null}}_parseStructTree(e){const t=new StructTreePage(e,this.pageDict);t.parse(this.ref);return t}async getAnnotationsData(e,t,a){const r=await this._parsedAnnotations;if(0===r.length)return r;const i=[],c=[];let l;const h=!!(a&n),u=!!(a&s),d=!!(a&o),f=[];for(const a of r){const r=h||u&&a.viewable;(r||d&&a.printable)&&i.push(a.data);if(a.hasTextContent&&r){l??=this.#nt(e);c.push(a.extractTextContent(l,t,[-1/0,-1/0,1/0,1/0]).catch(function(e){warn(`getAnnotationsData - ignoring textContent during "${t.name}" task: "${e}".`)}))}else a.overlaysTextContent&&r&&f.push(a)}if(f.length>0){const a=new Intersector(f);c.push(this.extractTextContent({handler:e,task:t,includeMarkedContent:!1,disableNormalization:!1,sink:null,viewBox:this.view,lang:null,intersector:a}).then(()=>{a.setText()}))}await Promise.all(c);return i}get annotations(){const e=this.#st("Annots");return shadow(this,"annotations",Array.isArray(e)?e:[])}get _parsedAnnotations(){const e=this.pdfManager.ensure(this,"annotations").then(async e=>{if(0===e.length)return e;const[t,a]=await Promise.all([this.pdfManager.ensureDoc("annotationGlobals"),this.pdfManager.ensureDoc("fieldObjects")]);if(!t)return[];const r=a?.orphanFields,i=[];for(const a of e)i.push(AnnotationFactory.create(this.xref,a,t,this._localIdFactory,!1,r,null,this.ref).catch(function(e){warn(`_parsedAnnotations: "${e}".`);return null}));const n=[];let s,o;for(const e of await Promise.all(i))e&&(e instanceof WidgetAnnotation?(o||=[]).push(e):e instanceof PopupAnnotation?(s||=[]).push(e):n.push(e));o&&n.push(...o);s&&n.push(...s);return n});this.#rt=!0;return shadow(this,"_parsedAnnotations",e)}get jsActions(){return shadow(this,"jsActions",collectActions(this.xref,this.pageDict,se))}async collectAnnotationsByType(e,t,a,r,i){const{pageIndex:n}=this;if(this.#rt){const e=await this._parsedAnnotations;for(const{data:t}of e)if(!a||a.has(t.annotationType)){t.pageIndex=n;r.push(Promise.resolve(t))}return}const s=await this.pdfManager.ensure(this,"annotations");for(const o of s)r.push(AnnotationFactory.create(this.xref,o,i,this._localIdFactory,!1,null,a,this.ref).then(async a=>{if(!a)return null;a.data.pageIndex=n;if(a.hasTextContent&&a.viewable){const r=this.#nt(e);await a.extractTextContent(r,t,[-1/0,-1/0,1/0,1/0])}return a.data}).catch(function(e){warn(`collectAnnotationsByType: "${e}".`);return null}))}}const cc=new Uint8Array([37,80,68,70,45]),lc=new Uint8Array([115,116,97,114,116,120,114,101,102]),hc=new Uint8Array([101,110,100,111,98,106]);function find(e,t,a=1024,r=!1){const i=t.length,n=e.peekBytes(a),s=n.length-i;if(s<=0)return!1;if(r){const a=i-1;let r=n.length-1;for(;r>=a;){let s=0;for(;s=i){e.pos+=r-a;return!0}r--}}else{let a=0;for(;a<=s;){let r=0;for(;r=i){e.pos+=a;return!0}a++}}return!1}class PDFDocument{#ht=new Map;#ut=null;constructor(e,t){if(t.length<=0)throw new InvalidPDFException("The PDF file is empty, i.e. its size is zero bytes.");this.pdfManager=e;this.stream=t;this.xref=new XRef(t,e);const a={font:0};this._globalIdFactory=class{static getDocId(){return`g_${e.docId}`}static createFontId(){return"f"+ ++a.font}static createObjId(){unreachable("Abstract method `createObjId` called.")}static getPageObjId(){unreachable("Abstract method `getPageObjId` called.")}}}parse(e){this.xref.parse(e);this.catalog=new Catalog(this.pdfManager,this.xref)}get linearization(){let e=null;try{e=Linearization.create(this.stream)}catch(e){if(e instanceof MissingDataException)throw e;info(e)}return shadow(this,"linearization",e)}get startXRef(){const e=this.stream;let t=0;if(this.linearization){e.reset();if(find(e,hc)){e.skip(6);let a=e.peekByte();for(;isWhiteSpace(a);){e.pos++;a=e.peekByte()}t=e.pos-e.start}}else{const a=1024,r=lc.length;let i=!1,n=e.end;for(;!i&&n>0;){n-=a-r;n<0&&(n=0);e.pos=n;i=find(e,lc,a,!0)}if(i){e.skip(9);let a;do{a=e.getByte()}while(isWhiteSpace(a));let r="";for(;a>=32&&a<=57;){r+=String.fromCharCode(a);a=e.getByte()}t=parseInt(r,10);isNaN(t)&&(t=0)}}return shadow(this,"startXRef",t)}checkHeader(){const e=this.stream;e.reset();if(!find(e,cc))return;e.moveStart();e.skip(cc.length);let t,a="";for(;(t=e.getByte())>32&&a.length<7;)a+=String.fromCharCode(t);ua.test(a)?this.#ut=a:warn(`Invalid PDF header version: ${a}`)}parseStartXRef(){this.xref.setStartXRef(this.startXRef)}get numPages(){let e=0;e=this.catalog.hasActualNumPages?this.catalog.numPages:this.xfaFactory?this.xfaFactory.getNumPages():this.linearization?this.linearization.numPages:this.catalog.numPages;return shadow(this,"numPages",e)}#dt(e,t=0){return!!Array.isArray(e)&&e.every(e=>{if(!((e=this.xref.fetchIfRef(e))instanceof Dict))return!1;if(e.has("Kids")){if(++t>10){warn("#hasOnlyDocumentSignatures: maximum recursion depth reached");return!1}return this.#dt(e.get("Kids"),t)}const a=isName(e.get("FT"),"Sig"),r=e.get("Rect"),i=Array.isArray(r)&&r.every(e=>0===e);return a&&i})}get _xfaStreams(){const{acroForm:e}=this.catalog;if(!e)return null;const t=e.get("XFA"),a=new Map(["xdp:xdp","template","datasets","config","connectionSet","localeSet","stylesheet","/xdp:xdp"].map(e=>[e,null]));if(t instanceof BaseStream&&!t.isEmpty){a.set("xdp:xdp",t);return a}if(!Array.isArray(t)||0===t.length)return null;for(let e=0,r=t.length;el.handleSetFont(r,[Name.get(e),1],null,h,t,d,a,i).catch(e=>{warn(`loadXfaFonts: "${e}".`);return null}),f=[];for(const[e,t]of i){const a=t.get("FontDescriptor");if(!(a instanceof Dict))continue;let r=a.get("FontFamily");r=r.replaceAll(/[ ]+(\d)/g,"$1");const i={fontFamily:r,fontWeight:a.get("FontWeight"),italicAngle:-a.get("ItalicAngle")};validateCSSFont(i)&&f.push(parseFont(e,null,i))}await Promise.all(f);const g=this.xfaFactory.setFonts(u);if(!g)return;n.ignoreErrors=!0;f.length=0;u.length=0;const p=new Set;for(const e of g)getXfaFontName(`${e}-Regular`)||p.add(e);p.size&&g.push("PdfJS-Fallback");for(const e of g)if(!p.has(e))for(const t of[{name:"Regular",fontWeight:400,italicAngle:0},{name:"Bold",fontWeight:700,italicAngle:0},{name:"Italic",fontWeight:400,italicAngle:12},{name:"BoldItalic",fontWeight:700,italicAngle:12}]){const a=`${e}-${t.name}`;f.push(parseFont(a,getXfaFontDict(a),{fontFamily:e,fontWeight:t.fontWeight,italicAngle:t.italicAngle}))}await Promise.all(f);this.xfaFactory.appendFonts(u,p)}loadXfaResources(e,t){return Promise.all([this.#gt(e,t).catch(()=>{}),this.#ft()])}serializeXfaData(e){return this.xfaFactory?this.xfaFactory.serializeData(e):null}get version(){return this.catalog.version||this.#ut}get formInfo(){const e={hasFields:!1,hasAcroForm:!1,hasXfa:!1,hasSignatures:!1},{acroForm:t}=this.catalog;if(!t)return shadow(this,"formInfo",e);try{const a=t.get("Fields"),r=Array.isArray(a)&&a.length>0;e.hasFields=r;const i=t.get("XFA");e.hasXfa=Array.isArray(i)&&i.length>0||i instanceof BaseStream&&!i.isEmpty;const n=!!(1&t.get("SigFlags")),s=n&&this.#dt(a);e.hasAcroForm=r&&!s;e.hasSignatures=n}catch(e){if(e instanceof MissingDataException)throw e;warn(`Cannot fetch form information: "${e}".`)}return shadow(this,"formInfo",e)}get documentInfo(){const{catalog:e,formInfo:t,xref:a}=this,r={PDFFormatVersion:this.version,Language:e.lang,EncryptFilterName:a.encrypt?.filterName??null,IsLinearized:!!this.linearization,IsAcroFormPresent:t.hasAcroForm,IsXFAPresent:t.hasXfa,IsCollectionPresent:!!e.collection,IsSignaturesPresent:t.hasSignatures};let i;try{i=a.trailer.get("Info")}catch(e){if(e instanceof MissingDataException)throw e;info("The document information dictionary is invalid.")}if(!(i instanceof Dict))return shadow(this,"documentInfo",r);for(const[e,t]of i){switch(e){case"Title":case"Author":case"Subject":case"Keywords":case"Creator":case"Producer":case"CreationDate":case"ModDate":if("string"==typeof t){r[e]=stringToPDFString(t);continue}break;case"Trapped":if(t instanceof Name){r[e]=t;continue}break;default:let a;switch(typeof t){case"string":a=stringToPDFString(t);break;case"number":case"boolean":a=t;break;default:t instanceof Name&&(a=t)}if(void 0===a){warn(`Bad value, for custom key "${e}", in Info: ${t}.`);continue}r.Custom??=Object.create(null);r.Custom[e]=a;continue}warn(`Bad value, for key "${e}", in Info: ${t}.`)}return shadow(this,"documentInfo",r)}get fingerprints(){const e="\0".repeat(16);function validate(t){return"string"==typeof t&&16===t.length&&t!==e}const t=this.xref.trailer.get("ID");let a,r;if(Array.isArray(t)&&validate(t[0])){a=stringToBytes(t[0]);t[1]!==t[0]&&validate(t[1])&&(r=stringToBytes(t[1]))}else a=calculateMD5(this.stream.getByteRange(0,1024),0,1024);return shadow(this,"fingerprints",[a.toHex(),r?.toHex()??null])}async#pt(e){const{catalog:t,linearization:a,xref:r}=this,i=Ref.get(a.objectNumberFirst,0);try{const e=await r.fetchAsync(i);if(e instanceof Dict){let a=e.getRaw("Type");a instanceof Ref&&(a=await r.fetchAsync(a));if(isName(a,"Page")||!e.has("Type")&&!e.has("Kids")&&e.has("Contents")){t.pageKidsCountCache.has(i)||t.pageKidsCountCache.put(i,1);t.pageIndexCache.has(i)||t.pageIndexCache.put(i,0);return[e,i]}}throw new FormatError("The Linearization dictionary doesn't point to a valid Page dictionary.")}catch(a){warn(`_getLinearizationPage: "${a.message}".`);return t.getPageDict(e)}}getPage(e){const t=this.#ht.get(e);if(t)return t;const{catalog:a,linearization:r,xfaFactory:i}=this;let n;n=i?Promise.resolve([Dict.empty,null]):r?.pageFirst===e?this.#pt(e):a.getPageDict(e);n=n.then(([t,r])=>new Page({pdfManager:this.pdfManager,xref:this.xref,pageIndex:e,pageDict:t,ref:r,globalIdFactory:this._globalIdFactory,fontCache:a.fontCache,builtInCMapCache:a.builtInCMapCache,standardFontDataCache:a.standardFontDataCache,globalColorSpaceCache:a.globalColorSpaceCache,globalImageCache:a.globalImageCache,systemFontCache:a.systemFontCache,nonBlendModesSet:a.nonBlendModesSet,xfaFactory:i}));this.#ht.set(e,n);return n}async checkFirstPage(e=!1){if(!e)try{await this.getPage(0)}catch(e){if(e instanceof XRefEntryException){this.#ht.delete(0);await this.cleanup();throw new XRefParseException}}}async checkLastPage(e=!1){const{catalog:t,pdfManager:a}=this;t.setActualNumPages();let r;try{await Promise.all([a.ensureDoc("xfaFactory"),a.ensureDoc("linearization"),a.ensureCatalog("numPages")]);if(this.xfaFactory)return;r=this.linearization?this.linearization.numPages:t.numPages;if(!Number.isInteger(r))throw new FormatError("Page count is not an integer.");if(r<=1)return;await this.getPage(r-1)}catch(i){this.#ht.delete(r-1);await this.cleanup();if(i instanceof XRefEntryException&&!e)throw new XRefParseException;warn(`checkLastPage - invalid /Pages tree /Count: ${r}.`);let n;try{n=await t.getAllPageDicts(e)}catch(a){if(a instanceof XRefEntryException&&!e)throw new XRefParseException;t.setActualNumPages(1);return}for(const[e,[r,i]]of n){let n;if(r instanceof Error){n=Promise.reject(r);n.catch(()=>{})}else n=Promise.resolve(new Page({pdfManager:a,xref:this.xref,pageIndex:e,pageDict:r,ref:i,globalIdFactory:this._globalIdFactory,fontCache:t.fontCache,builtInCMapCache:t.builtInCMapCache,standardFontDataCache:t.standardFontDataCache,globalColorSpaceCache:this.globalColorSpaceCache,globalImageCache:t.globalImageCache,systemFontCache:t.systemFontCache,nonBlendModesSet:t.nonBlendModesSet,xfaFactory:null}));this.#ht.set(e,n)}t.setActualNumPages(n.size)}}async fontFallback(e,t){const{catalog:a,pdfManager:r}=this;for(const i of await Promise.all(a.fontCache))if(i.loadedName===e){i.fallback(t,r.evaluatorOptions);return}}async cleanup(e=!1){return this.catalog?this.catalog.cleanup(e):clearGlobalCaches()}async#mt(e,t,a,r,i,n,s){const{xref:o}=this;if(!(a instanceof Ref)||n.has(a))return;n.put(a);const c=await o.fetchAsync(a);if(!(c instanceof Dict))return;let l=await c.getAsync("Subtype");l=l instanceof Name?l.name:null;if("Link"===l)return;if(c.has("T")){const t=stringToPDFString(await c.getAsync("T"));e=""===e?t:`${e}.${t}`}else{let a=c;for(;;){a=a.getRaw("Parent")||t;if(a instanceof Ref){if(n.has(a))break;a=await o.fetchAsync(a)}if(!(a instanceof Dict))break;if(a.has("T")){const t=stringToPDFString(await a.getAsync("T"));e=""===e?t:`${e}.${t}`;break}}}t&&!c.has("Parent")&&isName(c.get("Subtype"),"Widget")&&s.put(a,t);r.has(e)||r.set(e,[]);r.get(e).push(AnnotationFactory.create(o,a,i,null,!0,s,null,null).then(e=>e?.getFieldObject()).catch(function(e){warn(`#collectFieldObjects: "${e}".`);return null}));if(!c.has("Kids"))return;const h=await c.getAsync("Kids");if(Array.isArray(h))for(const t of h)await this.#mt(e,a,t,r,i,n,s)}get fieldObjects(){return shadow(this,"fieldObjects",this.pdfManager.ensureDoc("formInfo").then(async e=>{if(!e.hasFields)return null;const t=await this.annotationGlobals;if(!t)return null;const{acroForm:a}=t,r=new RefSet,i=Object.create(null),n=new Map,s=new RefSetCache;for(const e of a.get("Fields"))await this.#mt("",null,e,n,t,r,s);const o=[];for(const[e,t]of n)o.push(Promise.all(t).then(t=>{(t=t.filter(e=>!!e)).length>0&&(i[e]=t)}));await Promise.all(o);return{allFields:objectSize(i)>0?i:null,orphanFields:s}}))}get hasJSActions(){return shadow(this,"hasJSActions",this.pdfManager.ensureDoc("_parseHasJSActions"))}async _parseHasJSActions(){const[e,t]=await Promise.all([this.pdfManager.ensureCatalog("jsActions"),this.pdfManager.ensureDoc("fieldObjects")]);return!!e||!!t?.allFields&&Object.values(t.allFields).some(e=>e.some(e=>null!==e.actions))}get calculationOrderIds(){const e=this.catalog.acroForm?.get("CO");if(!Array.isArray(e)||0===e.length)return shadow(this,"calculationOrderIds",null);const t=[];for(const a of e)a instanceof Ref&&t.push(a.toString());return shadow(this,"calculationOrderIds",t.length?t:null)}get annotationGlobals(){return shadow(this,"annotationGlobals",AnnotationFactory.createGlobals(this.pdfManager))}}class BasePdfManager{constructor({docBaseUrl:e,docId:t,enableXfa:a,evaluatorOptions:r,handler:i,password:n}){this._docBaseUrl=function parseDocBaseUrl(e){if(e){const t=createValidAbsoluteUrl(e);if(t)return t.href;warn(`Invalid absolute docBaseUrl: "${e}".`)}return null}(e);this._docId=t;this._password=n;this.enableXfa=a;r.isOffscreenCanvasSupported&&=FeatureTest.isOffscreenCanvasSupported;r.isImageDecoderSupported&&=FeatureTest.isImageDecoderSupported;this.evaluatorOptions=Object.freeze(r);ImageResizer.setOptions(r);JpegStream.setOptions(r);OperatorList.setOptions(r);const s={...r,handler:i};JpxImage.setOptions(s);IccColorSpace.setOptions(s);CmykICCBasedCS.setOptions(s);JBig2WasmImage.setOptions(s)}get docId(){return this._docId}get password(){return this._password}get docBaseUrl(){return this._docBaseUrl}ensureDoc(e,t){return this.ensure(this.pdfDocument,e,t)}ensureXRef(e,t){return this.ensure(this.pdfDocument.xref,e,t)}ensureCatalog(e,t){return this.ensure(this.pdfDocument.catalog,e,t)}getPage(e){return this.pdfDocument.getPage(e)}fontFallback(e,t){return this.pdfDocument.fontFallback(e,t)}cleanup(e=!1){return this.pdfDocument.cleanup(e)}async ensure(e,t,a){unreachable("Abstract method `ensure` called")}requestRange(e,t){unreachable("Abstract method `requestRange` called")}requestLoadedStream(e=!1){unreachable("Abstract method `requestLoadedStream` called")}sendProgressiveData(e){unreachable("Abstract method `sendProgressiveData` called")}updatePassword(e){this._password=e}terminate(e){unreachable("Abstract method `terminate` called")}}class LocalPdfManager extends BasePdfManager{constructor(e){super(e);const t=new Stream(e.source);this.pdfDocument=new PDFDocument(this,t);this._loadedStreamPromise=Promise.resolve(t)}async ensure(e,t,a){const r=e[t];return"function"==typeof r?r.apply(e,a):r}requestRange(e,t){return Promise.resolve()}requestLoadedStream(e=!1){return this._loadedStreamPromise}terminate(e){}}class NetworkPdfManager extends BasePdfManager{constructor(e){super(e);this.streamManager=new ChunkedStreamManager(e.source,{msgHandler:e.handler,length:e.length,disableAutoFetch:e.disableAutoFetch,rangeChunkSize:e.rangeChunkSize});this.pdfDocument=new PDFDocument(this,this.streamManager.getStream())}async ensure(e,t,a){try{const r=e[t];return"function"==typeof r?r.apply(e,a):r}catch(r){if(!(r instanceof MissingDataException))throw r;await this.requestRange(r.begin,r.end);return this.ensure(e,t,a)}}requestRange(e,t){return this.streamManager.requestRange(e,t)}requestLoadedStream(e=!1){return this.streamManager.requestAllChunks(e)}sendProgressiveData(e){this.streamManager.onReceiveData({chunk:e})}terminate(e){this.streamManager.abort(e)}}const uc=1,dc=2,fc=1,gc=2,pc=3,mc=4,bc=5,yc=6,wc=7,Sc=8;function onFn(){}function wrapReason(e){if(e instanceof AbortException||e instanceof InvalidPDFException||e instanceof PasswordException||e instanceof ResponseException||e instanceof UnknownErrorException)return e;e instanceof Error||"object"==typeof e&&null!==e||unreachable('wrapReason: Expected "reason" to be a (possibly cloned) Error.');switch(e.name){case"AbortException":return new AbortException(e.message);case"InvalidPDFException":return new InvalidPDFException(e.message);case"PasswordException":return new PasswordException(e.message,e.code);case"ResponseException":return new ResponseException(e.message,e.status,e.missing);case"UnknownErrorException":return new UnknownErrorException(e.message,e.details)}return new UnknownErrorException(e.message,e.toString())}class MessageHandler{#bt=new AbortController;constructor(e,t,a){this.sourceName=e;this.targetName=t;this.comObj=a;this.callbackId=1;this.streamId=1;this.streamSinks=Object.create(null);this.streamControllers=Object.create(null);this.callbackCapabilities=Object.create(null);this.actionHandler=Object.create(null);a.addEventListener("message",this.#yt.bind(this),{signal:this.#bt.signal})}#yt({data:e}){if(e.targetName!==this.sourceName)return;if(e.stream){this.#wt(e);return}if(e.callback){const t=e.callbackId,a=this.callbackCapabilities[t];if(!a)throw new Error(`Cannot resolve callback ${t}`);delete this.callbackCapabilities[t];if(e.callback===uc)a.resolve(e.data);else{if(e.callback!==dc)throw new Error("Unexpected callback case");a.reject(wrapReason(e.reason))}return}const t=this.actionHandler[e.action];if(!t)throw new Error(`Unknown action from worker: ${e.action}`);if(e.callbackId){const a=this.sourceName,r=e.sourceName,i=this.comObj;Promise.try(t,e.data).then(function(t){i.postMessage({sourceName:a,targetName:r,callback:uc,callbackId:e.callbackId,data:t})},function(t){i.postMessage({sourceName:a,targetName:r,callback:dc,callbackId:e.callbackId,reason:wrapReason(t)})});return}e.streamId?this.#St(e):t(e.data)}on(e,t){const a=this.actionHandler;if(a[e])throw new Error(`There is already an actionName called "${e}"`);a[e]=t}send(e,t,a){this.comObj.postMessage({sourceName:this.sourceName,targetName:this.targetName,action:e,data:t},a)}sendWithPromise(e,t,a){const r=this.callbackId++,i=Promise.withResolvers();this.callbackCapabilities[r]=i;try{this.comObj.postMessage({sourceName:this.sourceName,targetName:this.targetName,action:e,callbackId:r,data:t},a)}catch(e){i.reject(e)}return i.promise}sendWithStream(e,t,a,r){const i=this.streamId++,n=this.sourceName,s=this.targetName,o=this.comObj;return new ReadableStream({start:a=>{const c=Promise.withResolvers();this.streamControllers[i]={controller:a,startCall:c,pullCall:null,cancelCall:null,isClosed:!1};o.postMessage({sourceName:n,targetName:s,action:e,streamId:i,data:t,desiredSize:a.desiredSize},r);return c.promise},pull:e=>{const t=Promise.withResolvers();this.streamControllers[i].pullCall=t;o.postMessage({sourceName:n,targetName:s,stream:yc,streamId:i,desiredSize:e.desiredSize});return t.promise},cancel:e=>{assert(e instanceof Error,"cancel must have a valid reason");const t=Promise.withResolvers();this.streamControllers[i].cancelCall=t;this.streamControllers[i].isClosed=!0;o.postMessage({sourceName:n,targetName:s,stream:fc,streamId:i,reason:wrapReason(e)});return t.promise}},a)}#St(e){const t=e.streamId,a=this.sourceName,r=e.sourceName,i=this.comObj,n=this,s=this.actionHandler[e.action],o={enqueue(e,n=1,s){if(this.isCancelled)return;const o=this.desiredSize;this.desiredSize-=n;if(o>0&&this.desiredSize<=0){this.sinkCapability=Promise.withResolvers();this.ready=this.sinkCapability.promise}i.postMessage({sourceName:a,targetName:r,stream:mc,streamId:t,chunk:e},s)},close(){if(!this.isCancelled){this.isCancelled=!0;i.postMessage({sourceName:a,targetName:r,stream:pc,streamId:t});delete n.streamSinks[t]}},error(e){assert(e instanceof Error,"error must have a valid reason");if(!this.isCancelled){this.isCancelled=!0;i.postMessage({sourceName:a,targetName:r,stream:bc,streamId:t,reason:wrapReason(e)})}},sinkCapability:Promise.withResolvers(),onPull:null,onCancel:null,isCancelled:!1,desiredSize:e.desiredSize,ready:null};o.sinkCapability.resolve();o.ready=o.sinkCapability.promise;this.streamSinks[t]=o;Promise.try(s,e.data,o).then(function(){i.postMessage({sourceName:a,targetName:r,stream:Sc,streamId:t,success:!0})},function(e){i.postMessage({sourceName:a,targetName:r,stream:Sc,streamId:t,reason:wrapReason(e)})})}#wt(e){const t=e.streamId,a=this.sourceName,r=e.sourceName,i=this.comObj,n=this.streamControllers[t],s=this.streamSinks[t];switch(e.stream){case Sc:e.success?n.startCall.resolve():n.startCall.reject(wrapReason(e.reason));break;case wc:e.success?n.pullCall.resolve():n.pullCall.reject(wrapReason(e.reason));break;case yc:if(!s){i.postMessage({sourceName:a,targetName:r,stream:wc,streamId:t,success:!0});break}s.desiredSize<=0&&e.desiredSize>0&&s.sinkCapability.resolve();s.desiredSize=e.desiredSize;Promise.try(s.onPull||onFn).then(function(){i.postMessage({sourceName:a,targetName:r,stream:wc,streamId:t,success:!0})},function(e){i.postMessage({sourceName:a,targetName:r,stream:wc,streamId:t,reason:wrapReason(e)})});break;case mc:assert(n,"enqueue should have stream controller");if(n.isClosed)break;n.controller.enqueue(e.chunk);break;case pc:assert(n,"close should have stream controller");if(n.isClosed)break;n.isClosed=!0;n.controller.close();this.#xt(n,t);break;case bc:assert(n,"error should have stream controller");n.controller.error(wrapReason(e.reason));this.#xt(n,t);break;case gc:e.success?n.cancelCall.resolve():n.cancelCall.reject(wrapReason(e.reason));this.#xt(n,t);break;case fc:if(!s)break;const o=wrapReason(e.reason);Promise.try(s.onCancel||onFn,o).then(function(){i.postMessage({sourceName:a,targetName:r,stream:gc,streamId:t,success:!0})},function(e){i.postMessage({sourceName:a,targetName:r,stream:gc,streamId:t,reason:wrapReason(e)})});s.sinkCapability.reject(o);s.isCancelled=!0;delete this.streamSinks[t];break;default:throw new Error("Unexpected stream case")}}async#xt(e,t){await Promise.allSettled([e.startCall?.promise,e.pullCall?.promise,e.cancelCall?.promise]);delete this.streamControllers[t]}destroy(){this.#bt?.abort();this.#bt=null}}async function writeObject(e,t,a,{encrypt:r=null,encryptRef:i=null}){const n=r&&i!==e?r.createCipherTransform(e.num,e.gen):null;a.push(`${e.num} ${e.gen} obj\n`);await writeValue(t,a,n);a.push("\nendobj\n")}async function writeDict(e,t,a){t.push("<<");for(const[r,i]of e.getRawEntries()){t.push(` /${escapePDFName(r)} `);await writeValue(i,t,a)}t.push(">>")}async function writeValue(e,t,a){if(e instanceof Name)t.push(`/${escapePDFName(e.name)}`);else if(e instanceof Ref)t.push(`${e.num} ${e.gen} R`);else if(Array.isArray(e)||ArrayBuffer.isView(e))await async function writeArray(e,t,a){t.push("[");for(let r=0,i=e.length;r=256&&!o)try{const e=new CompressionStream("deflate"),t=e.writable.getWriter();await t.ready;t.write(r).then(async()=>{await t.ready;await t.close()}).catch(()=>{});const a=await new Response(e.readable).arrayBuffer();r=new Uint8Array(a);let c,l;if(n){if(!o){c=Array.isArray(n)?[Name.get("FlateDecode"),...n]:[Name.get("FlateDecode"),n];s&&(l=Array.isArray(s)?[null,...s]:[null,s])}}else c=Name.get("FlateDecode");c&&i.set("Filter",c);l&&i.set("DecodeParms",l)}catch(e){info(`writeStream - cannot compress data: "${e}".`)}let c=bytesToString(r);a&&(c=a.encryptString(c));i.set("Length",c.length);await writeDict(i,t,a);t.push(" stream\n",c,"\nendstream")}(e,t,a):null===e?t.push("null"):warn(`Unhandled value in writer: ${typeof e}, please file a bug.`)}function writeInt(e,t,a,r){for(let i=t+a-1;i>a-1;i--){r[i]=255&e;e>>=8}return a+t}function writeString(e,t,a){const r=e.length;for(let i=0;i1&&(n=a.documentElement.searchNode([i.at(-1)],0));n?n.childNodes=Array.isArray(r)?r.map(e=>new SimpleDOMNode("value",e)):[new SimpleDOMNode("#text",r)]:warn(`Node not found for path: ${t}`)}const r=[];a.documentElement.dump(r);return r.join("")}(r.fetchIfRef(t).getString(),a)}const i=new StringStream(e);i.dict=new Dict(r);i.dict.setIfName("Type","EmbeddedFile");a.put(t,{data:i})}function getIndexes(e){const t=[];for(const{ref:a}of e)a.num===t.at(-2)+t.at(-1)?t[t.length-1]+=1:t.push(a.num,1);return t}function computeIDs(e,t,a){if(Array.isArray(t.fileIds)&&t.fileIds.length>0){const r=function computeMD5(e,t){const a=Math.floor(Date.now()/1e3),r=t.filename||"",i=[a.toString(),r,e.toString(),...t.infoMap.values()],n=Math.sumPrecise(i.map(e=>e.length)),s=new Uint8Array(n);let o=0;for(const e of i)o=writeString(e,o,s);return bytesToString(calculateMD5(s,0,s.length))}(e,t);a.set("ID",[t.fileIds[0]||r,r])}}async function incrementalUpdate({originalData:e,xrefInfo:t,changes:a,xref:r=null,hasXfa:i=!1,xfaDatasetsRef:n=null,hasXfaDatasetsEntry:s=!1,needAppearances:o,acroFormRef:c=null,acroForm:l=null,xfaData:h=null,useXrefStream:u=!1}){await async function updateAcroform({xref:e,acroForm:t,acroFormRef:a,hasXfa:r,hasXfaDatasetsEntry:i,xfaDatasetsRef:n,needAppearances:s,changes:o}){!r||i||n||warn("XFA - Cannot save it");if(!s&&(!r||!n||i))return;const c=t.clone();if(r&&!i){const e=t.get("XFA").slice();e.splice(2,0,"datasets");e.splice(3,0,n);c.set("XFA",e)}s&&c.set("NeedAppearances",!0);o.put(a,{data:c})}({xref:r,acroForm:l,acroFormRef:c,hasXfa:i,hasXfaDatasetsEntry:s,xfaDatasetsRef:n,needAppearances:o,changes:a});i&&updateXFA({xfaData:h,xfaDatasetsRef:n,changes:a,xref:r});const d=function getTrailerDict(e,t,a){const r=new Dict(null);r.setIfDefined("Prev",e?.startXRef);const i=e.newRef;if(a){t.put(i,{data:""});r.set("Size",i.num+1);r.setIfName("Type","XRef")}else r.set("Size",i.num);r.setIfDefined("Root",e?.rootRef);r.setIfDefined("Info",e?.infoRef);r.setIfDefined("Encrypt",e?.encryptRef);return r}(t,a,u),f=[],g=await async function writeChanges(e,t,a=[]){const r=[];for(const[i,{data:n,objStreamRef:s,index:o}]of e.items())if(s)r.push({ref:i,data:n,objStreamRef:s,index:o});else if(null!==n&&"string"!=typeof n){await writeObject(i,n,a,t);r.push({ref:i,data:a.join("")});a.length=0}else r.push({ref:i,data:n});return r.sort((e,t)=>e.ref.num-t.ref.num)}(a,r,f);let p=e.length;const m=e.at(-1);if(10!==m&&13!==m){f.push("\n");p+=1}for(const{data:e}of g)null!==e&&f.push(e);await(u?async function getXRefStreamTable(e,t,a,r,i){const n=[];let s=0,o=0;for(const{ref:e,data:r,objStreamRef:i,index:c}of a){let a;s=Math.max(s,t);if(i){a=c;n.push([2,i.num,a])}else if(null!==r){a=Math.min(e.gen,65535);n.push([1,t,a]);t+=r.length}else{a=Math.min(e.gen+1,65535);n.push([0,0,a])}o=Math.max(o,a)}r.set("Index",getIndexes(a));const c=[1,getSizeInBytes(s),getSizeInBytes(o)];r.set("W",c);computeIDs(t,e,r);const l=Math.sumPrecise(c),h=new Uint8Array(l*n.length),u=new Stream(h);u.dict=r;let d=0;for(const[e,t,a]of n){d=writeInt(e,c[0],d,h);d=writeInt(t,c[1],d,h);d=writeInt(a,c[2],d,h)}await writeObject(e.newRef,u,i,{});i.push("startxref\n",t.toString(),"\n%%EOF\n")}(t,p,g,d,f):async function getXRefTable(e,t,a,r,i){i.push("xref\n");const n=getIndexes(a);let s=0;for(const{ref:e,data:r}of a){if(e.num===n[s]){i.push(`${n[s]} ${n[s+1]}\n`);s+=2}if(null!==r){i.push(`${t.toString().padStart(10,"0")} ${Math.min(e.gen,65535).toString().padStart(5,"0")} n\r\n`);t+=r.length}else i.push(`0000000000 ${Math.min(e.gen+1,65535).toString().padStart(5,"0")} f\r\n`)}computeIDs(t,e,r);i.push("trailer\n");await writeDict(r,i,null);i.push("\nstartxref\n",t.toString(),"\n%%EOF\n")}(t,p,g,d,f));const b=e.length+Math.sumPrecise(f.map(e=>e.length)),y=new Uint8Array(b);y.set(e);let w=e.length;for(const e of f)w=writeString(e,w,y);return y}class PageData{constructor(e,t){this.page=e;this.documentData=t;this.annotations=null;this.pointingNamedDestinations=null;t.pagesMap.put(e.ref,this)}}class DocumentData{constructor(e){this.document=e;this.destinations=null;this.pageLabels=null;this.pagesMap=new RefSetCache;this.oldRefMapping=new RefSetCache;this.dedupNamedDestinations=new Map;this.usedNamedDestinations=new Set;this.postponedRefCopies=new RefSetCache;this.usedStructParents=new Set;this.oldStructParentMapping=new Map;this.structTreeRoot=null;this.parentTree=null;this.idTree=null;this.roleMap=null;this.classMap=null;this.namespaces=null;this.structTreeAF=null;this.structTreePronunciationLexicon=[]}}class XRefWrapper{constructor(e){this.entries=e}fetch(e){return e instanceof Ref?this.entries[e.num]:e}}class PDFEditor{constructor({useObjectStreams:e=!0,title:t="",author:a=""}={}){this.hasSingleFile=!1;this.currentDocument=null;this.oldPages=[];this.newPages=[];this.xref=[null];this.xrefWrapper=new XRefWrapper(this.xref);this.newRefCount=1;[this.rootRef,this.rootDict]=this.newDict;[this.infoRef,this.infoDict]=this.newDict;[this.pagesRef,this.pagesDict]=this.newDict;this.namesDict=null;this.useObjectStreams=e;this.objStreamRefs=e?new Set:null;this.version="1.7";this.title=t;this.author=a;this.pageLabels=null;this.namedDestinations=new Map;this.parentTree=new Map;this.structTreeKids=[];this.idTree=new Map;this.classMap=new Dict;this.roleMap=new Dict;this.namespaces=new Map;this.structTreeAF=[];this.structTreePronunciationLexicon=[]}get newRef(){return Ref.get(this.newRefCount++,0)}get newDict(){const e=this.newRef;return[e,this.xref[e.num]=new Dict]}async#At(e,t){const a=this.newRef;this.xref[a.num]=await this.#kt(e,!0,t);return a}cloneDict(e){const t=e.clone();t.xref=this.xrefWrapper;return t}async#kt(e,t,a){if(e instanceof Ref){const{currentDocument:{oldRefMapping:t}}=this;let r=t.get(e);if(r)return r;const i=e;if("number"==typeof(e=await a.fetchAsync(i)))return e;r=this.newRef;t.put(i,r);this.xref[r.num]=await this.#kt(e,!0,a);return r}const r=[],{currentDocument:{postponedRefCopies:i}}=this;if(Array.isArray(e)){t&&(e=e.slice());for(let t=0,n=e.length;te[t]=a):r.push(this.#kt(e[t],!0,a).then(a=>e[t]=a))}await Promise.all(r);return e}let n;if(e instanceof BaseStream){({dict:n}=e=e.getOriginalStream().clone());n.xref=this.xrefWrapper}else if(e instanceof Dict){t&&((e=e.clone()).xref=this.xrefWrapper);n=e}if(n){for(const[e,t]of n.getRawEntries()){const s=i.get(t);s?s.push(t=>n.set(e,t)):r.push(this.#kt(t,!0,a).then(t=>n.set(e,t)))}await Promise.all(r)}return e}async#Ct(e,t,a,r,i,n,s,o=new RefSet){const{currentDocument:{pagesMap:c,oldRefMapping:l}}=this,h=t.getRaw("Pg");if(h instanceof Ref&&!c.has(h))return null;let u;const d=u=t.getRaw("K");if(d instanceof Ref){if(o.has(d))return null;u=await a.fetchAsync(d);Array.isArray(u)||(u=[d])}u=Array.isArray(u)?u:[u];const f=[],g=[];for(let t of u){const h=t instanceof Ref?t:null;if(h){if(o.has(h))continue;o.put(h);t=await a.fetchAsync(h)}if("number"==typeof t){f.push(t);continue}if(!(t instanceof Dict))continue;const u=t.getRaw("Pg");if(u instanceof Ref&&!c.has(u))continue;const d=t.get("Type");if(!d||isName(d,"StructElem")){let e=!1;if(h&&r.has(h)){if(!isName(t.get("S"),"Link"))continue;e=!0}const c=await this.#Ct(h,t,a,r,i,n,s,o);if(c){g.push(f.length);f.push(c);h&&l.put(h,c);e&&this.xref[c.num].setIfName("S","Span")}continue}if(isName(d,"OBJR")){if(!h)continue;const t=l.get(h);if(!t)continue;const a=this.xref[t.num].getRaw("Obj");if(a instanceof Ref){const t=this.xref[a.num];if(t instanceof Dict&&!t.has("StructParent")&&e){const a=this.parentTree.size;this.parentTree.set(a,[l,e]);t.set("StructParent",a)}}f.push(t);continue}if(isName(d,"MCR")){const e=await this.#kt(h||t,!0,a);f.push(e);continue}if(h){const e=await this.#kt(h,!0,a);f.push(e)}}if(0!==u.length&&0===f.length)return null;const p=this.newRef,m=this.xref[p.num]=this.cloneDict(t);m.delete("ID");m.delete("C");m.delete("K");m.delete("P");m.delete("S");await this.#kt(m,!1,a);const b=t.get("C");if(b instanceof Name){const e=n.get(b.name);e?m.set("C",Name.get(e)):m.set("C",b)}else if(Array.isArray(b)){const e=[];for(const t of b)if(t instanceof Name){const a=n.get(t.name);a?e.push(Name.get(a)):e.push(t)}m.set("C",e)}const y=t.get("S");if(y instanceof Name){const e=s.get(y.name);e?m.set("S",Name.get(e)):m.set("S",y)}const w=t.get("ID");if("string"==typeof w){const e=stringToPDFString(w,!1),t=i.get(e);t?m.set("ID",stringToAsciiOrUTF16BE(t)):m.set("ID",w)}let S=m.get("A");if(S){Array.isArray(S)||(S=[S]);for(let e of S){e=this.xrefWrapper.fetch(e);if(isName(e.get("O"),"Table")&&e.has("Headers")){const t=this.xrefWrapper.fetch(e.getRaw("Headers"));if(Array.isArray(t))for(let e=0,a=t.length;e1&&m.set("K",f);return p}async extractPages(e){const t=[];let a=0;this.hasSingleFile=1===e.length;const r=[];for(const{document:i,includePages:n,excludePages:s,pageIndices:o}of e){if(!i)continue;o&&(a=-1);const e=new DocumentData(i);r.push(e);t.push(this.#vt(e));let c,l,h,u;for(const e of n||[])Array.isArray(e)?(l||=[]).push(e):(c||=new Set).add(e);for(const e of s||[])Array.isArray(e)?(u||=[]).push(e):(h||=new Set).add(e);let d=0;for(let r=0,n=i.numPages;r=t&&r<=a){e=!0;break}if(e)continue}let n,s=!1;c&&(s=c.has(r));if(!s&&l)for(const[e,t]of l)if(r>=e&&r<=t){s=!0;break}s||c||l||(s=!0);if(s){o&&(n=o[d++]);if(void 0===n)if(-1!==a)n=a++;else for(n=0;void 0===this.oldPages[n];n++);t.push(i.getPage(r).then(t=>{this.oldPages[n]=new PageData(t,e)}))}}}await Promise.all(t);t.length=0;this.#Ft(r);this.#It();for(const e of this.oldPages)t.push(this.#Tt(e));await Promise.all(t);this.#Ot();this.#Dt(r);for(let e=0,t=this.oldPages.length;ee.destinations=t),t.ensureCatalog("rawPageLabels").then(t=>e.pageLabels=t),t.ensureCatalog("structTreeRoot").then(t=>e.structTreeRoot=t)]);const r=e.structTreeRoot;if(r){const t=r.dict,i=t.get("ParentTree");if(i){const t=new NumberTree(i,a);e.parentTree=t.getAll(!0)}const n=t.get("IDTree");if(n){const t=new NameTree(n,a);e.idTree=t.getAll(!0)}e.roleMap=t.get("RoleMap")||null;e.classMap=t.get("ClassMap")||null;let s=t.get("Namespaces")||null;s&&!Array.isArray(s)&&(s=[s]);e.namespaces=s;e.structTreeAF=t.get("AF")||null;e.structTreePronunciationLexicon=t.get("PronunciationLexicon")||null}}async#Tt(e){const{page:{xref:t,annotations:a},documentData:{pagesMap:r,destinations:i,usedNamedDestinations:n}}=e;if(!a)return;const s=[];let o=[],c=0;for(const e of a){const a=c++;s.push(t.fetchIfRefAsync(e).then(async t=>{if(!isName(t.get("Subtype"),"Link")){o[a]=e;return}const s=t.get("A"),c=s instanceof Dict?s.get("D"):t.get("Dest");if(c&&(!Array.isArray(c)||c[0]instanceof Ref&&!r.has(c[0]))){if("string"==typeof c){const t=stringToPDFString(c,!0);if(i.has(t)){o[a]=e;n.add(t)}}}else o[a]=e}))}await Promise.all(s);o=o.filter(e=>!!e);e.annotations=o.length>0?o:null}#Dt(e){for(const{postponedRefCopies:t,pagesMap:a}of e)for(const e of a.keys())t.put(e,[])}#Rt(e){for(const{postponedRefCopies:t,oldRefMapping:a}of e){for(const[e,r]of t.items()){const t=a.get(e);for(const e of r)e(t)}t.clear()}}#Nt(e,t,a=new RefSet){if(e instanceof Ref){if(!a.has(e)){a.put(e);this.#Nt(this.xref[e.num],t,a)}return}if(Array.isArray(e)){for(const r of e)this.#Nt(r,t,a);return}let r;e instanceof BaseStream?({dict:r}=e):e instanceof Dict&&(r=e);if(r){t(r);for(const e of r.getRawValues())this.#Nt(e,t,a)}}async#Bt(e){let t=0;const{parentTree:a}=this;for(let e=0,r=this.newPages.length;e{const c=e.get("StructParent")??e.get("StructParents");if("number"!=typeof c)return;s.add(c);let l=r.get(c);const h=l instanceof Ref?l:null;if(h){const e=o.fetch(h);Array.isArray(e)&&(l=e)}Array.isArray(l)&&l.every(e=>null===e)&&(l=null);if(!l){e.has("StructParent")?e.delete("StructParent"):e.delete("StructParents");return}let u=n.get(c);if(void 0===u){u=t++;n.set(c,u);a.set(u,[i,l])}e.has("StructParent")?e.set("StructParent",u):e.set("StructParents",u)})}const{structTreeKids:r,idTree:i,classMap:n,roleMap:s,namespaces:o,structTreeAF:c,structTreePronunciationLexicon:l}=this;for(const t of e){const{document:{xref:e},oldRefMapping:a,parentTree:h,usedStructParents:u,structTreeRoot:d,idTree:f,classMap:g,roleMap:p,namespaces:m,structTreeAF:b,structTreePronunciationLexicon:y}=t;if(!d)continue;this.currentDocument=t;const w=new RefSet;for(const[e,t]of h||[])!u.has(e)&&t instanceof Ref&&w.put(t);const S=new Map;for(const[e,t]of f||[]){let a=e;if(i.has(e))for(let t=1;;t++){const r=`${e}_${t}`;if(!i.has(r)){S.set(e,r);a=r;break}}i.set(a,t)}const x=new Map;if(g?.size>0)for(let[t,a]of g){a=await this.#kt(a,!0,e);if(n.has(t))for(let e=1;;e++){const a=`${t}_${e}`;if(!n.has(a)){x.set(t,a);t=a;break}}n.set(t,a)}const k=new Map;if(p?.size>0)for(const[e,t]of p){const a=s.get(e);if(a){if(a!==t)for(let a=1;;a++){const r=`${e}_${a}`;if(!s.has(r)){k.set(e,r);s.set(r,t);break}}}else s.set(e,t)}if(m?.length>0)for(const t of m){const a=await e.fetchIfRefAsync(t);let r=a.get("NS");if(!r||o.has(r))continue;r=stringToPDFString(r,!1);const i=await this.#kt(a,!0,e);o.set(r,i)}if(b)for(const t of b)c.push(await this.#kt(t,!0,e));if(y)for(const t of y)l.push(await this.#kt(t,!0,e));let C=d.dict.get("K");if(C){C=Array.isArray(C)?C:[C];for(let t of C){const a=t instanceof Ref?t:null;if(a&&w.has(a))continue;t=await e.fetchIfRefAsync(t);const i=await this.#Ct(a,t,e,w,S,x,k);i&&r.push(i)}for(const[e,t]of f||[]){const r=a.get(t),n=S.get(e)||e;r?i.set(n,r):i.delete(n)}}}for(const[e,[t,r]]of a){if(!r){a.delete(e);continue}if(!Array.isArray(r)){const i=t.get(r);void 0===i?a.delete(e):a.set(e,i);continue}const i=r.map(e=>e instanceof Ref&&t.get(e)||null);0===i.length||i.every(e=>null===e)?a.delete(e):a.set(e,i)}this.currentDocument=null}#Ft(e){for(const t of e){if(!t.destinations)continue;const{destinations:e,pagesMap:a}=t,r=t.destinations=new Map;for(const[t,i]of Object.entries(e)){const e=i[0],n=a.get(e);if(n){(n.pointingNamedDestinations||=new Set).add(t);r.set(t,i)}}}}#Ot(){const{namedDestinations:e}=this;for(let t=0,a=this.oldPages.length;t{"string"==typeof r&&e.set(a,t.get(stringToPDFString(r,!0))||r)};for(const t of e){const e=this.xref[t.num];if(!isName(e.get("Subtype"),"Link"))continue;const a=e.get("A");if(a instanceof Dict&&a.has("D")){const e=a.get("D");fixDestination(a,"D",e);continue}const r=e.get("Dest");fixDestination(e,"Dest",r)}}async#It(){if(!this.hasSingleFile)return;const{documentData:{document:e,pageLabels:t}}=this.oldPages[0];if(!t)return;const a=e.numPages,r=[],i=new Set(this.oldPages.map(({page:{pageIndex:e}})=>e));let n=null,s=-1;for(let e=0;ee!==l[t])&&f.set(e,a)}const p=t.userUnit;1!==p&&f.set("UserUnit",p);f.setIfDict("Resources",await this.#kt(h,!0,o));if(r){const e=await this.#kt(r,!0,o);this.#Pt(e,n);f.setIfArray("Annots",e)}if(this.useObjectStreams){const e=this.newRefCount,t=[];for(let a=g;a0;){const{dict:e,kids:t,parentRef:a}=i.pop();if(t.length<=16){e.set("Kids",t);for(const e of t)this.xref[e.num].set("Parent",a);continue}const r=Math.max(16,Math.ceil(t.length/16)),n=[];for(let e=0;ee.localeCompare(t):([e],[t])=>e-t),[r,i]=this.newDict,n=[{dict:i,entries:a}],s=t?"Names":"Nums";for(;n.length>0;){const{dict:e,entries:t}=n.pop();if(t.length<=64){e.set("Limits",[t[0][0],t.at(-1)[0]]);e.set(s,t.flat());continue}const a=[],r=Math.max(64,Math.ceil(t.length/64));for(let e=0;e0){const e=this.#Lt(Array.from(this.parentTree.entries()),!1);this.xref[e.num].setIfName("Type","ParentTree");r.set("ParentTree",e);r.set("ParentTreeNextKey",this.parentTree.size)}if(this.idTree.size>0){const e=this.#Lt(Array.from(this.idTree.entries()),!0);this.xref[e.num].setIfName("Type","IDTree");r.set("IDTree",e)}if(this.classMap.size>0){const e=this.newRef;this.xref[e.num]=this.classMap;r.set("ClassMap",e)}if(this.roleMap.size>0){const e=this.newRef;this.xref[e.num]=this.roleMap;r.set("RoleMap",e)}if(this.namespaces.size>0){const e=this.newRef;this.xref[e.num]=Array.from(this.namespaces.values());r.set("Namespaces",e)}if(this.structTreeAF.length>0){const e=this.newRef;this.xref[e.num]=this.structTreeAF;r.set("AF",e)}if(this.structTreePronunciationLexicon.length>0){const e=this.newRef;this.xref[e.num]=this.structTreePronunciationLexicon;r.set("PronunciationLexicon",e)}t.set("StructTreeRoot",a)}async#Xt(){const{rootDict:e}=this;e.setIfName("Type","Catalog");e.setIfName("Version",this.version);this.#Et();this.#_t();this.#Ut();this.#jt()}#qt(){const e=new Map;if(this.hasSingleFile){const{xref:{trailer:t}}=this.oldPages[0].documentData.document,a=t.get("Info");for(const[t,r]of a||[])"string"==typeof r&&e.set(t,stringToPDFString(r))}e.delete("ModDate");e.set("CreationDate",getModificationDate());e.set("Creator","PDF.js");e.set("Producer","Firefox");this.author&&e.set("Author",this.author);this.title&&e.set("Title",this.title);for(const[t,a]of e)this.infoDict.set(t,stringToAsciiOrUTF16BE(a));return e}async#Ht(){if(!this.hasSingleFile)return[null,null,null];const{documentData:e}=this.oldPages[0],{document:{xref:{trailer:t,encrypt:a}}}=e;if(!t.has("Encrypt"))return[null,null,null];const r=t.get("Encrypt");if(!(r instanceof Dict))return[null,null,null];this.currentDocument=e;const i=[await this.#At(r,t.xref),a,t.get("ID")];this.currentDocument=null;return i}async#Wt(){const e=new RefSetCache;e.put(Ref.get(0,65535),{data:null});for(let t=1,a=this.xref.length;te.charCodeAt(0)),250,222,250,206];return incrementalUpdate({originalData:new Uint8Array(s),changes:i,xrefInfo:{startXRef:null,rootRef:this.rootRef,infoRef:this.infoRef,encryptRef:t,newRef:n,fileIds:r||[null,null],infoMap:e},useXrefStream:this.useObjectStreams,xref:{encrypt:a,encryptRef:t}})}}class BasePDFStream{#$t=null;#zt=null;_fullReader=null;_rangeReaders=new Set;_source=null;constructor(e,t,a){this._source=e;this.#$t=t;this.#zt=a}get _progressiveDataLength(){return this._fullReader?._loaded??0}getFullReader(){assert(!this._fullReader,"BasePDFStream.getFullReader can only be called once.");return this._fullReader=new this.#$t(this)}getRangeReader(e,t){if(t<=this._progressiveDataLength)return null;const a=new this.#zt(this,e,t);this._rangeReaders.add(a);return a}cancelAllRequests(e){this._fullReader?.cancel(e);for(const t of new Set(this._rangeReaders))t.cancel(e)}}class BasePDFStreamReader{onProgress=null;_contentLength=0;_filename=null;_headersCapability=Promise.withResolvers();_isRangeSupported=!1;_isStreamingSupported=!1;_loaded=0;_stream=null;constructor(e){this._stream=e}get headersReady(){return this._headersCapability.promise}get filename(){return this._filename}get contentLength(){return this._contentLength}get isRangeSupported(){return this._isRangeSupported}get isStreamingSupported(){return this._isStreamingSupported}async read(){unreachable("Abstract method `read` called")}cancel(e){unreachable("Abstract method `cancel` called")}}class BasePDFStreamRangeReader{_stream=null;constructor(e,t,a){this._stream=e}async read(){unreachable("Abstract method `read` called")}cancel(e){unreachable("Abstract method `cancel` called")}}class PDFWorkerStream extends BasePDFStream{constructor(e){super(e,PDFWorkerStreamReader,PDFWorkerStreamRangeReader)}}class PDFWorkerStreamReader extends BasePDFStreamReader{_reader=null;constructor(e){super(e);const{msgHandler:t}=e._source,a=t.sendWithStream("GetReader");this._reader=a.getReader();t.sendWithPromise("ReaderHeadersReady").then(e=>{this._contentLength=e.contentLength;this._isStreamingSupported=e.isStreamingSupported;this._isRangeSupported=e.isRangeSupported;this._headersCapability.resolve()},this._headersCapability.reject)}async read(){const{value:e,done:t}=await this._reader.read();return t?{value:void 0,done:!0}:{value:e.buffer,done:!1}}cancel(e){this._reader.cancel(e)}}class PDFWorkerStreamRangeReader extends BasePDFStreamRangeReader{_reader=null;constructor(e,t,a){super(e,t,a);const{msgHandler:r}=e._source,i=r.sendWithStream("GetRangeReader",{begin:t,end:a});this._reader=i.getReader()}async read(){const{value:e,done:t}=await this._reader.read();return t?{value:void 0,done:!0}:{value:e.buffer,done:!1}}cancel(e){this._reader.cancel(e)}}class WorkerTask{constructor(e){this.name=e;this.terminated=!1;this._capability=Promise.withResolvers()}get finished(){return this._capability.promise}finish(){this._capability.resolve()}terminate(){this.terminated=!0}ensureNotTerminated(){if(this.terminated)throw new Error("Worker task was terminated")}}class WorkerMessageHandler{static{"undefined"==typeof window&&!e&&"undefined"!=typeof self&&"function"==typeof self.postMessage&&"onmessage"in self&&this.initializeFromPort(self)}static setup(e,t){let a=!1;e.on("test",t=>{if(!a){a=!0;e.send("test",t instanceof Uint8Array)}});e.on("configure",e=>{!function setVerbosityLevel(e){Number.isInteger(e)&&(Qt=e)}(e.verbosity)});e.on("GetDocRequest",e=>this.createDocumentHandler(e,t))}static createDocumentHandler(e,t){let a,r=!1,i=null;const n=new Set,s=getVerbosityLevel(),{docId:o,apiVersion:c}=e,l="5.4.624";if(c!==l)throw new Error(`The API version "${c}" does not match the Worker version "${l}".`);const buildMsg=(e,t)=>`The \`${e}.prototype\` contains unexpected enumerable property "${t}", thus breaking e.g. \`for...in\` iteration of ${e}s.`;for(const e in{})throw new Error(buildMsg("Object",e));for(const e in[])throw new Error(buildMsg("Array",e));const h=o+"_worker";let u=new MessageHandler(h,o,t);function ensureNotTerminated(){if(r)throw new Error("Worker was terminated")}function startWorkerTask(e){n.add(e)}function finishWorkerTask(e){e.finish();n.delete(e)}async function loadDocument(e){await a.ensureDoc("checkHeader");await a.ensureDoc("parseStartXRef");await a.ensureDoc("parse",[e]);await a.ensureDoc("checkFirstPage",[e]);await a.ensureDoc("checkLastPage",[e]);const t=await a.ensureDoc("isPureXfa");if(t){const e=new WorkerTask("loadXfaResources");startWorkerTask(e);await a.ensureDoc("loadXfaResources",[u,e]);finishWorkerTask(e)}const[r,i]=await Promise.all([a.ensureDoc("numPages"),a.ensureDoc("fingerprints")]);return{numPages:r,fingerprints:i,htmlForXfa:t?await a.ensureDoc("htmlForXfa"):null}}function setupDoc(e){function onSuccess(e){ensureNotTerminated();u.send("GetDoc",{pdfInfo:e})}function onFailure(e){ensureNotTerminated();if(e instanceof PasswordException){const t=new WorkerTask(`PasswordException: response ${e.code}`);startWorkerTask(t);u.sendWithPromise("PasswordRequest",e).then(function({password:e}){finishWorkerTask(t);a.updatePassword(e);pdfManagerReady()}).catch(function(){finishWorkerTask(t);u.send("DocException",e)})}else u.send("DocException",wrapReason(e))}function pdfManagerReady(){ensureNotTerminated();loadDocument(!1).then(onSuccess,function(e){ensureNotTerminated();e instanceof XRefParseException?a.requestLoadedStream().then(function(){ensureNotTerminated();loadDocument(!0).then(onSuccess,onFailure)}):onFailure(e)})}ensureNotTerminated();(async function getPdfManager({data:e,password:t,disableAutoFetch:a,rangeChunkSize:r,length:n,docBaseUrl:s,enableXfa:c,evaluatorOptions:l}){const h={source:null,disableAutoFetch:a,docBaseUrl:s,docId:o,enableXfa:c,evaluatorOptions:l,handler:u,length:n,password:t,rangeChunkSize:r};if(e){h.source=e;return new LocalPdfManager(h)}const d=new PDFWorkerStream({msgHandler:u}),f=d.getFullReader(),g=Promise.withResolvers();let p,m=[],b=0;f.headersReady.then(function(){if(f.isRangeSupported){h.source=d;h.length=f.contentLength;h.disableAutoFetch||=f.isStreamingSupported;p=new NetworkPdfManager(h);for(const e of m)p.sendProgressiveData(e);m=[];g.resolve(p);i=null}}).catch(function(e){g.reject(e);i=null});new Promise(function(e,t){const readChunk=function({value:e,done:a}){try{ensureNotTerminated();if(a){if(!p){const e=arrayBuffersToBytes(m);m=[];n&&e.length!==n&&warn("reported HTTP length is different from actual");h.source=e;p=new LocalPdfManager(h);g.resolve(p)}i=null;return}b+=e.byteLength;f.isStreamingSupported||u.send("DocProgress",{loaded:b,total:Math.max(b,f.contentLength||0)});p?p.sendProgressiveData(e):m.push(e);f.read().then(readChunk,t)}catch(e){t(e)}};f.read().then(readChunk,t)}).catch(function(e){g.reject(e);i=null});i=e=>{d.cancelAllRequests(e)};return g.promise})(e).then(function(e){if(r){e.terminate(new AbortException("Worker was terminated."));throw new Error("Worker was terminated")}a=e;a.requestLoadedStream(!0).then(e=>{u.send("DataLoaded",{length:e.bytes.byteLength})})}).then(pdfManagerReady,onFailure)}u.on("GetPage",function(e){return a.getPage(e.pageIndex).then(function(e){return Promise.all([a.ensure(e,"rotate"),a.ensure(e,"ref"),a.ensure(e,"userUnit"),a.ensure(e,"view")]).then(function([e,t,a,r]){return{rotate:e,ref:t,refStr:t?.toString()??null,userUnit:a,view:r}})})});u.on("GetPageIndex",function(e){const t=Ref.get(e.num,e.gen);return a.ensureCatalog("getPageIndex",[t])});u.on("GetDestinations",function(e){return a.ensureCatalog("destinations")});u.on("GetDestination",function(e){return a.ensureCatalog("getDestination",[e.id])});u.on("GetPageLabels",function(e){return a.ensureCatalog("pageLabels")});u.on("GetPageLayout",function(e){return a.ensureCatalog("pageLayout")});u.on("GetPageMode",function(e){return a.ensureCatalog("pageMode")});u.on("GetViewerPreferences",function(e){return a.ensureCatalog("viewerPreferences")});u.on("GetOpenAction",function(e){return a.ensureCatalog("openAction")});u.on("GetAttachments",function(e){return a.ensureCatalog("attachments")});u.on("GetDocJSActions",function(e){return a.ensureCatalog("jsActions")});u.on("GetPageJSActions",function({pageIndex:e}){return a.getPage(e).then(e=>a.ensure(e,"jsActions"))});u.on("GetAnnotationsByType",async function({types:e,pageIndexesToSkip:t}){const[r,i]=await Promise.all([a.ensureDoc("numPages"),a.ensureDoc("annotationGlobals")]);if(!i)return null;const n=[],s=[];let o=null;try{for(let c=0,l=r;ct&&t.collectAnnotationsByType(u,o,e,s,i)||[]))}await Promise.all(n);return(await Promise.all(s)).filter(e=>!!e)}finally{o&&finishWorkerTask(o)}});u.on("GetOutline",function(e){return a.ensureCatalog("documentOutline")});u.on("GetOptionalContentConfig",function(e){return a.ensureCatalog("optionalContentConfig")});u.on("GetPermissions",function(e){return a.ensureCatalog("permissions")});u.on("GetMetadata",function(e){return Promise.all([a.ensureDoc("documentInfo"),a.ensureCatalog("metadata"),a.ensureCatalog("hasStructTree")])});u.on("GetMarkInfo",function(e){return a.ensureCatalog("markInfo")});u.on("GetData",function(e){return a.requestLoadedStream().then(e=>e.bytes)});u.on("GetAnnotations",function({pageIndex:e,intent:t}){return a.getPage(e).then(function(a){const r=new WorkerTask(`GetAnnotations: page ${e}`);startWorkerTask(r);return a.getAnnotationsData(u,r,t).then(e=>{finishWorkerTask(r);return e},e=>{finishWorkerTask(r);throw e})})});u.on("GetFieldObjects",function(e){return a.ensureDoc("fieldObjects").then(e=>e?.allFields||null)});u.on("HasJSActions",function(e){return a.ensureDoc("hasJSActions")});u.on("GetCalculationOrderIds",function(e){return a.ensureDoc("calculationOrderIds")});u.on("ExtractPages",async function({pageInfos:e}){if(!e){warn("extractPages: nothing to extract.");return null}Array.isArray(e)||(e=[e]);let t=0;for(const r of e)if(null===r.document)r.document=a.pdfDocument;else if(ArrayBuffer.isView(r.document)){const e=new LocalPdfManager({source:r.document,docId:`${o}_extractPages_${t++}`,handler:u,password:r.password??null,evaluatorOptions:Object.assign({},a.evaluatorOptions)});let i=!1,n=!0;for(;;)try{await e.requestLoadedStream();await e.ensureDoc("checkHeader");await e.ensureDoc("parseStartXRef");await e.ensureDoc("parse",[i]);break}catch(t){if(t instanceof XRefParseException){if(!1===i){i=!0;continue}n=!1;warn("extractPages: XRefParseException.")}else if(t instanceof PasswordException){const a=new WorkerTask(`PasswordException: response ${t.code}`);startWorkerTask(a);try{const{password:a}=await u.sendWithPromise("PasswordRequest",t);e.updatePassword(a)}catch{n=!1;warn("extractPages: invalid password.")}finally{finishWorkerTask(a)}}else{n=!1;warn("extractPages: invalid document.")}if(!n)break}n||(r.document=null);if(await e.ensureDoc("isPureXfa")){r.document=null;warn("extractPages does not support pure XFA documents.")}else r.document=e.pdfDocument}else warn("extractPages: invalid document.");try{const t=new PDFEditor;return await t.extractPages(e)}catch(e){console.error(e);return null}});u.on("SaveDocument",async function({isPureXfa:e,numPages:t,annotationStorage:r,filename:i}){const n=[a.requestLoadedStream(),a.ensureCatalog("acroForm"),a.ensureCatalog("acroFormRef"),a.ensureDoc("startXRef"),a.ensureDoc("xref"),a.ensureCatalog("structTreeRoot")],s=new RefSetCache,o=[],c=e?null:getNewAnnotationsMap(r),[l,h,d,f,g,p]=await Promise.all(n),m=g.trailer.getRaw("Root")||null;let b;if(c){p?await p.canUpdateStructTree({pdfManager:a,newAnnotationsByPage:c})&&(b=p):await StructTreeRoot.canCreateStructureTree({catalogRef:m,pdfManager:a,newAnnotationsByPage:c})&&(b=null);const e=AnnotationFactory.generateImages(r.values(),g,a.evaluatorOptions.isOffscreenCanvasSupported),t=void 0===b?o:[];for(const[r,i]of c)t.push(a.getPage(r).then(t=>{const a=new WorkerTask(`Save (editor): page ${r}`);startWorkerTask(a);return t.saveNewAnnotations(u,a,i,e,s).finally(function(){finishWorkerTask(a)})}));null===b?o.push(Promise.all(t).then(async()=>{await StructTreeRoot.createStructureTree({newAnnotationsByPage:c,xref:g,catalogRef:m,pdfManager:a,changes:s})})):b&&o.push(Promise.all(t).then(async()=>{await b.updateStructureTree({newAnnotationsByPage:c,pdfManager:a,changes:s})}))}if(e)o.push(a.ensureDoc("serializeXfaData",[r]));else for(let e=0;ee.needAppearances),x=h instanceof Dict&&h.get("XFA")||null;let k=null,C=!1;if(Array.isArray(x)){for(let e=0,t=x.length;e{g.resetNewTemporaryRef()})});u.on("GetOperatorList",function(e,t){const{pageId:r,pageIndex:i}=e;a.getPage(r).then(function(a){const r=new WorkerTask(`GetOperatorList: page ${i}`);startWorkerTask(r);const n=s>=ce?Date.now():0;a.getOperatorList({handler:u,sink:t,task:r,intent:e.intent,cacheKey:e.cacheKey,annotationStorage:e.annotationStorage,modifiedIds:e.modifiedIds,pageIndex:i}).then(function(e){finishWorkerTask(r);n&&info(`page=${i+1} - getOperatorList: time=${Date.now()-n}ms, len=${e.length}`);t.close()},function(e){finishWorkerTask(r);r.terminated||t.error(e)})})});u.on("GetTextContent",function(e,t){const{pageId:r,pageIndex:i,includeMarkedContent:n,disableNormalization:o}=e;a.getPage(r).then(function(e){const a=new WorkerTask("GetTextContent: page "+i);startWorkerTask(a);const r=s>=ce?Date.now():0;e.extractTextContent({handler:u,task:a,sink:t,includeMarkedContent:n,disableNormalization:o}).then(function(){finishWorkerTask(a);r&&info(`page=${i+1} - getTextContent: time=`+(Date.now()-r)+"ms");t.close()},function(e){finishWorkerTask(a);a.terminated||t.error(e)})})});u.on("GetStructTree",function(e){return a.getPage(e.pageIndex).then(e=>a.ensure(e,"getStructTree"))});u.on("FontFallback",function(e){return a.fontFallback(e.id,u)});u.on("Cleanup",function(e){return a.cleanup(!0)});u.on("Terminate",function(e){r=!0;const t=[];if(a){a.terminate(new AbortException("Worker was terminated."));const e=a.cleanup();t.push(e);a=null}else clearGlobalCaches();i?.(new AbortException("Worker was terminated."));for(const e of n){t.push(e.finished);e.terminate()}return Promise.all(t).then(function(){u.destroy();u=null})});u.on("Ready",function(t){setupDoc(e);e=null});return h}static initializeFromPort(e){const t=new MessageHandler("worker","main",e);this.setup(t,e);t.send("ready",null)}}globalThis.pdfjsWorker={WorkerMessageHandler};export{WorkerMessageHandler}; \ No newline at end of file diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/ri--image-circle-ai-line.svg b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/ri--image-circle-ai-line.svg new file mode 100644 index 000000000..6ed507aed --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/public/ri--image-circle-ai-line.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/auth/callback/oci/route.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/auth/callback/oci/route.js new file mode 100644 index 000000000..df659b56d --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/auth/callback/oci/route.js @@ -0,0 +1,85 @@ +import { NextResponse } from 'next/server'; +import { getIDCSConfig, createSessionCookie } from '../../../../lib/auth'; +import { createLogger } from '../../../../lib/logger'; + +function getBaseUrl(request) { + let host = request.headers.get('x-forwarded-host') || request.headers.get('host'); + const proto = request.headers.get('x-forwarded-proto') || 'http'; + host = host.replace(/:80$/, '').replace(/:443$/, ''); + return `${proto}://${host}`; +} + +export async function GET(request) { + const requestId = crypto.randomUUID(); + const log = createLogger('auth-callback', { requestId }); + + const { searchParams } = new URL(request.url); + const code = searchParams.get('code'); + const error = searchParams.get('error'); + const baseUrl = getBaseUrl(request); + + if (error) { + log.error('IDCS OAuth error', { error, description: searchParams.get('error_description') }); + return NextResponse.redirect(new URL('/login?error=idcs_denied', baseUrl)); + } + + if (!code) { + return NextResponse.redirect(new URL('/login?error=no_code', baseUrl)); + } + + const idcs = getIDCSConfig(); + const redirectUri = `${baseUrl}/api/auth/callback/oci`; + + // Exchange authorization code for tokens + const tokenRes = await fetch(idcs.tokenUrl, { + method: 'POST', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + 'Authorization': 'Basic ' + btoa(`${idcs.clientId}:${idcs.clientSecret}`), + }, + body: new URLSearchParams({ + grant_type: 'authorization_code', + code, + redirect_uri: redirectUri, + }), + }); + + if (!tokenRes.ok) { + const errText = await tokenRes.text(); + log.error('IDCS token exchange failed', { status: tokenRes.status, error: errText }); + return NextResponse.redirect(new URL('/login?error=token_failed', baseUrl)); + } + + const tokens = await tokenRes.json(); + + // Get user info from IDCS + const userinfoRes = await fetch(idcs.userinfoUrl, { + headers: { 'Authorization': `Bearer ${tokens.access_token}` }, + }); + + let userInfo = {}; + if (userinfoRes.ok) { + userInfo = await userinfoRes.json(); + } else { + // Fallback: decode id_token payload + try { + const parts = tokens.id_token.split('.'); + userInfo = JSON.parse(atob(parts[1])); + } catch { + userInfo = { sub: 'unknown', name: 'User' }; + } + } + + const sessionCookie = await createSessionCookie(userInfo, tokens.id_token); + + const response = NextResponse.redirect(new URL('/', baseUrl)); + response.cookies.set('auth-session', sessionCookie, { + httpOnly: true, + secure: false, + sameSite: 'lax', + path: '/', + maxAge: 60 * 60 * 24 * 7, // 7 days + }); + + return response; +} diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/auth/login/route.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/auth/login/route.js new file mode 100644 index 000000000..87483fef2 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/auth/login/route.js @@ -0,0 +1,28 @@ +import { NextResponse } from 'next/server'; +import { isAuthEnabled, getIDCSConfig } from '../../../lib/auth'; + +function getBaseUrl(request) { + let host = request.headers.get('x-forwarded-host') || request.headers.get('host'); + const proto = request.headers.get('x-forwarded-proto') || 'http'; + host = host.replace(/:80$/, '').replace(/:443$/, ''); + return `${proto}://${host}`; +} + +export async function GET(request) { + if (!isAuthEnabled()) { + return NextResponse.redirect(new URL('/', getBaseUrl(request))); + } + + const idcs = getIDCSConfig(); + const redirectUri = `${getBaseUrl(request)}/api/auth/callback/oci`; + + const params = new URLSearchParams({ + response_type: 'code', + client_id: idcs.clientId, + redirect_uri: redirectUri, + scope: 'openid profile email', + state: crypto.randomUUID(), + }); + + return NextResponse.redirect(`${idcs.authorizeUrl}?${params}`); +} diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/auth/logout/route.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/auth/logout/route.js new file mode 100644 index 000000000..f3273f62e --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/auth/logout/route.js @@ -0,0 +1,31 @@ +import { NextResponse } from 'next/server'; +import { isAuthEnabled, getIDCSConfig, verifySessionCookie } from '../../../lib/auth'; + +export async function GET(request) { + const cookie = request.cookies.get('auth-session')?.value; + const session = await verifySessionCookie(cookie); + + // Clear cookies first + const clearCookies = (res) => { + res.cookies.set('auth-session', '', { path: '/', maxAge: 0 }); + res.cookies.set('auth-token', '', { path: '/', maxAge: 0 }); + return res; + }; + + // If IDCS is configured and we have an id_token, do proper IDCS logout + if (isAuthEnabled() && session?.id_token) { + const idcs = getIDCSConfig(); + const postLogoutUrl = new URL('/login', request.url).toString(); + const logoutUrl = `${idcs.logoutUrl}?id_token_hint=${encodeURIComponent(session.id_token)}&post_logout_redirect_uri=${encodeURIComponent(postLogoutUrl)}`; + return clearCookies(NextResponse.redirect(logoutUrl)); + } + + return clearCookies(NextResponse.redirect(new URL('/login', request.url))); +} + +export async function POST(request) { + const response = NextResponse.json({ ok: true }); + response.cookies.set('auth-session', '', { path: '/', maxAge: 0 }); + response.cookies.set('auth-token', '', { path: '/', maxAge: 0 }); + return response; +} diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/auth/session/route.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/auth/session/route.js new file mode 100644 index 000000000..6fbcfbb6c --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/auth/session/route.js @@ -0,0 +1,24 @@ +import { NextResponse } from 'next/server'; +import { verifySessionCookie, isAuthEnabled } from '../../../lib/auth'; + +export async function GET(request) { + if (!isAuthEnabled()) { + return NextResponse.json({ authenticated: false, authEnabled: false }); + } + + const cookie = request.cookies.get('auth-session')?.value; + const session = await verifySessionCookie(cookie); + + if (!session) { + return NextResponse.json({ authenticated: false, authEnabled: true }); + } + + return NextResponse.json({ + authenticated: true, + authEnabled: true, + user: { + name: session.name, + email: session.email, + }, + }); +} diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/conversations/route.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/conversations/route.js new file mode 100644 index 000000000..339a461aa --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/conversations/route.js @@ -0,0 +1,283 @@ +import { NextResponse } from 'next/server'; +import { ociRequest } from '../../lib/oci-proxy'; +import { createLogger } from '../../lib/logger'; + +// POST - Create a conversation or add item to existing +export async function POST(request) { + const requestId = crypto.randomUUID(); + const log = createLogger('conversations-api', { requestId }); + + try { + const { searchParams } = new URL(request.url); + const addItemToConv = searchParams.get('addItemTo'); + + const body = await request.json(); + + // If adding item to existing conversation + if (addItemToConv) { + // Formato correcto: wrapper "items" con array de mensajes + const itemBody = { + items: Array.isArray(body.items) ? body.items : [ + { + type: "message", + role: body.role || "user", + content: body.content + } + ] + }; + + log.info('Adding items to conversation', { conversationId: addItemToConv, body: JSON.stringify(itemBody) }); + + const response = await ociRequest('POST', `/conversations/${addItemToConv}/items`, { body: itemBody }); + + const text = await response.text(); + log.info('Add items response', { status: response.status, response: text }); + + if (response.ok) { + try { + return NextResponse.json(JSON.parse(text)); + } catch (e) { + return NextResponse.json({ success: true, raw: text }); + } + } + return NextResponse.json({ error: text, status: response.status }, { status: response.status }); + } + + const { metadata, items } = body; + + const requestBody = { + metadata: metadata || { topic: "test" }, + items: items || [{ type: "message", role: "user", content: "Hello!" }], + }; + + // Try different base paths for creating conversations (openai first since it worked) + const results = []; + + for (const basePath of ['/openai/v1', '/v1']) { + log.info('Trying POST conversation', { basePath }); + + try { + const response = await ociRequest('POST', '/conversations', { body: requestBody, basePath }); + + const text = await response.text(); + log.info('POST conversation response', { basePath, status: response.status, response: text.substring(0, 500) }); + + results.push({ + basePath, + status: response.status, + success: response.ok, + data: response.ok ? JSON.parse(text) : text, + }); + + if (response.ok) { + return NextResponse.json(JSON.parse(text)); + } + } catch (error) { + log.error('POST conversation error', { basePath, error: error.message }); + results.push({ + basePath, + success: false, + error: error.message, + }); + } + } + + return NextResponse.json({ + error: 'All endpoints failed', + results, + }, { status: 404 }); + + } catch (error) { + log.error('Conversation POST error', { error: error.message }); + return NextResponse.json( + { error: error.message || 'Failed to create conversation' }, + { status: 500 } + ); + } +} + +// GET - Test all possible endpoints for listing conversations/responses +export async function GET(request) { + const requestId = crypto.randomUUID(); + const log = createLogger('conversations-api', { requestId }); + + try { + const { searchParams } = new URL(request.url); + + // Get specific conversation by ID + const conversationId = searchParams.get('id'); + const responseId = searchParams.get('responseId'); + const getItems = searchParams.get('getItems') === 'true'; + + // Test getting a response by its ID + if (responseId) { + log.info('GET response by ID', { responseId }); + + const results = []; + for (const basePath of ['/v1', '/openai/v1']) { + for (const path of [`/responses/${responseId}`, `/responses/${responseId}?include=conversation.item`]) { + log.debug('Trying response endpoint', { basePath, path }); + + try { + const response = await ociRequest('GET', path, { basePath }); + + const text = await response.text(); + log.debug('Response endpoint result', { basePath, path, status: response.status, response: text.substring(0, 500) }); + + results.push({ + basePath, + path, + status: response.status, + success: response.ok, + data: response.ok ? JSON.parse(text) : text.substring(0, 300), + }); + + if (response.ok) { + return NextResponse.json({ + success: true, + data: JSON.parse(text), + }); + } + } catch (error) { + log.error('Response endpoint error', { basePath, path, error: error.message }); + results.push({ + basePath, + path, + success: false, + error: error.message, + }); + } + } + } + + return NextResponse.json({ + error: 'Could not retrieve response from any endpoint', + testedResponseId: responseId, + results, + }, { status: 404 }); + } + + if (conversationId) { + // If getItems is requested, try items endpoints + if (getItems) { + const results = []; + for (const basePath of ['/openai/v1', '/v1']) { + log.info('Get conversation items', { basePath, conversationId }); + + try { + // Paginate: fetch all items using limit + after cursor + let allItems = []; + let afterCursor = null; + let pageCount = 0; + const MAX_PAGES = 20; // Safety limit + + while (pageCount < MAX_PAGES) { + let queryString = `?limit=100`; + if (afterCursor) { + queryString += `&after=${afterCursor}`; + } + + const response = await ociRequest('GET', `/conversations/${conversationId}/items${queryString}`, { basePath }); + + const text = await response.text(); + log.debug('Items page response', { basePath, status: response.status, response: text.substring(0, 300) }); + + if (!response.ok) { + results.push({ + basePath, + status: response.status, + success: false, + data: text.substring(0, 200), + }); + break; + } + + const parsed = JSON.parse(text); + const pageItems = parsed.data || []; + allItems = allItems.concat(pageItems); + pageCount++; + + log.debug('Items pagination', { page: pageCount, pageItems: pageItems.length, total: allItems.length, hasMore: parsed.has_more }); + + if (!parsed.has_more || pageItems.length === 0) { + // All items fetched - return combined result + return NextResponse.json({ data: allItems }); + } + + // Use last_id as cursor for next page + afterCursor = parsed.last_id || pageItems[pageItems.length - 1]?.id; + if (!afterCursor) break; + } + + // If we got items but hit the page limit, return what we have + if (allItems.length > 0) { + log.info('Returning paginated items', { itemCount: allItems.length, pages: pageCount }); + return NextResponse.json({ data: allItems }); + } + } catch (error) { + log.error('Error fetching items', { basePath, error: error.message }); + results.push({ + basePath, + success: false, + error: error.message, + }); + } + } + + return NextResponse.json({ + error: 'Could not retrieve conversation items from any endpoint', + results, + }, { status: 404 }); + } + + // Try to get the conversation itself + for (const basePath of ['/openai/v1', '/v1']) { + log.info('Get conversation', { basePath, conversationId }); + + const response = await ociRequest('GET', `/conversations/${conversationId}`, { basePath }); + + if (response.ok) { + const data = await response.json(); + log.debug('Conversation response', { data: JSON.stringify(data).substring(0, 1000) }); + return NextResponse.json(data); + } else { + const errorText = await response.text(); + log.warn('Get conversation failed', { basePath, status: response.status, error: errorText.substring(0, 200) }); + } + } + + return NextResponse.json( + { error: 'Could not retrieve conversation from any endpoint' }, + { status: 404 } + ); + } + + // Default: Try listing conversations from multiple endpoints + for (const basePath of ['/openai/v1', '/v1']) { + log.info('List conversations', { basePath }); + + const response = await ociRequest('GET', '/conversations', { basePath }); + + if (response.ok) { + const data = await response.json(); + log.debug('List conversations response', { data: JSON.stringify(data).substring(0, 1000) }); + return NextResponse.json(data); + } else { + const errorText = await response.text(); + log.warn('List conversations failed', { basePath, status: response.status, error: errorText.substring(0, 200) }); + } + } + + return NextResponse.json( + { error: 'Could not list conversations from any endpoint' }, + { status: 404 } + ); + + } catch (error) { + log.error('Conversation GET error', { error: error.message }); + return NextResponse.json( + { error: error.message || 'Failed to fetch' }, + { status: 500 } + ); + } +} diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/files/[id]/content/route.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/files/[id]/content/route.js new file mode 100644 index 000000000..1af36fd7d --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/files/[id]/content/route.js @@ -0,0 +1,67 @@ +import { NextResponse } from 'next/server'; +import { ociRequest } from '../../../../lib/oci-proxy'; + +// GET /api/files/[id]/content → fetch file content +// +// Strategy: +// 1. If ?vsId=xxx is provided, use /vector_stores/{vsId}/files/{fileId}/content +// (returns parsed chunks, works for any file in the vector store regardless +// of upload purpose). This is the path for files uploaded with purpose=user_data +// which OCI/OpenAI policy blocks from direct /files/{id}/content download. +// 2. Otherwise, fall back to /files/{id}/content (raw file). Only works for files +// uploaded with a downloadable purpose (e.g. "assistants"). +// +// Query: +// ?vsId=xxx vector-store id (preferred) +// ?download=1 sets attachment disposition +// ?limit=N cap response at N bytes (preview) +// ?filename=name.txt filename for download +export async function GET(request, { params }) { + try { + const { id } = await params; + if (!id) return NextResponse.json({ error: 'id is required' }, { status: 400 }); + + const { searchParams } = new URL(request.url); + const vsId = searchParams.get('vsId'); + const download = searchParams.get('download') === '1'; + const limit = parseInt(searchParams.get('limit') || '0', 10); + const filename = searchParams.get('filename') || id; + + let body; + let contentType = 'text/plain; charset=utf-8'; + + if (vsId) { + // Vector store content endpoint — returns JSON with chunks + const response = await ociRequest('GET', `/vector_stores/${vsId}/files/${id}/content`); + if (!response.ok) { + const errorText = await response.text(); + return NextResponse.json({ error: errorText }, { status: response.status }); + } + const data = await response.json(); + // OCI returns: { file_id, file_name, attributes, content: [{ type, text }, ...] } + const chunks = Array.isArray(data?.content) ? data.content : []; + const text = chunks + .map((c) => (typeof c === 'string' ? c : c?.text || '')) + .filter(Boolean) + .join(''); + const sliced = limit > 0 ? text.slice(0, limit) : text; + body = sliced; + } else { + // Raw file fallback + const response = await ociRequest('GET', `/files/${id}/content`); + if (!response.ok) { + const errorText = await response.text(); + return NextResponse.json({ error: errorText }, { status: response.status }); + } + contentType = response.headers.get('content-type') || 'application/octet-stream'; + const buffer = await response.arrayBuffer(); + body = limit > 0 ? buffer.slice(0, limit) : buffer; + } + + const headers = { 'content-type': contentType }; + if (download) headers['content-disposition'] = `attachment; filename="${filename}"`; + return new Response(body, { headers }); + } catch (error) { + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/files/route.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/files/route.js new file mode 100644 index 000000000..529a7aac4 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/files/route.js @@ -0,0 +1,74 @@ +import { NextResponse } from 'next/server'; +import crypto from 'crypto'; +import { ociRequest, toNextResponse } from '../../lib/oci-proxy'; +import { createLogger } from '../../lib/logger'; + +// GET /api/files → list files +export async function GET() { + try { + return toNextResponse(await ociRequest('GET', '/files')); + } catch (error) { + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} + +// POST /api/files → upload file (multipart/form-data) +export async function POST(request) { + const requestId = crypto.randomUUID(); + const log = createLogger('files-api', { requestId }); + + try { + const formData = await request.formData(); + const file = formData.get('file'); + const purpose = formData.get('purpose') || 'user_data'; + + if (!file) return NextResponse.json({ error: 'file is required' }, { status: 400 }); + + const fileBuffer = Buffer.from(await file.arrayBuffer()); + const boundary = `----FormBoundary${crypto.randomBytes(16).toString('hex')}`; + + const body = Buffer.concat([ + Buffer.from( + `--${boundary}\r\n` + + `Content-Disposition: form-data; name="file"; filename="${file.name}"\r\n` + + `Content-Type: ${file.type || 'application/octet-stream'}\r\n\r\n` + ), + fileBuffer, + Buffer.from( + `\r\n--${boundary}\r\n` + + `Content-Disposition: form-data; name="purpose"\r\n\r\n` + + `${purpose}\r\n--${boundary}--\r\n` + ), + ]); + + const response = await ociRequest('POST', '/files', { + binaryBody: body, + extraHeaders: { + 'content-type': `multipart/form-data; boundary=${boundary}`, + 'content-length': body.length.toString(), + }, + }); + + if (!response.ok) { + const errorText = await response.text(); + log.error('File upload error', { status: response.status, error: errorText }); + return NextResponse.json({ error: errorText }, { status: response.status }); + } + return NextResponse.json(await response.json()); + } catch (error) { + log.error('File upload error', { error: error.message }); + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} + +// DELETE /api/files?id=FILE_ID → delete file +export async function DELETE(request) { + try { + const { searchParams } = new URL(request.url); + const id = searchParams.get('id'); + if (!id) return NextResponse.json({ error: 'id is required' }, { status: 400 }); + return toNextResponse(await ociRequest('DELETE', `/files/${id}`)); + } catch (error) { + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/generate-title/route.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/generate-title/route.js new file mode 100644 index 000000000..96676b69c --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/generate-title/route.js @@ -0,0 +1,96 @@ +import { NextResponse } from 'next/server'; +import { ociRequest } from '../../lib/oci-proxy'; +import { createLogger } from '../../lib/logger'; + +export async function POST(request) { + const requestId = crypto.randomUUID(); + const log = createLogger('generate-title-api', { requestId }); + + try { + const { userMessage } = await request.json(); + + if (!userMessage) { + return NextResponse.json({ error: 'userMessage is required' }, { status: 400 }); + } + + const prompt = `Convert to a clean 2-4 word title (fix typos): +"tell me a jok" → "Joke Request" +"whats the wether" → "Weather Inquiry" +"${userMessage.substring(0, 150)}" → "`; + + const requestBody = { + model: 'openai.gpt-4o-mini', + input: [{ role: 'user', content: prompt }], + stream: false + }; + + const response = await ociRequest('POST', '/responses', { body: requestBody }); + + if (!response.ok) { + const errorText = await response.text(); + log.error('OCI API error', { status: response.status, error: errorText }); + return NextResponse.json({ error: 'Failed to generate title' }, { status: response.status }); + } + + const data = await response.json(); + log.debug('OCI title response', { data: JSON.stringify(data) }); + + let rawText = ''; + if (typeof data.output === 'string') { + rawText = data.output; + } else if (Array.isArray(data.output)) { + const textOutput = data.output.find(o => o.type === 'message' || o.content); + if (textOutput?.content) { + if (Array.isArray(textOutput.content)) { + const textContent = textOutput.content.find(c => c.type === 'output_text' || c.text); + rawText = textContent?.text || textContent?.output_text || ''; + } else { + rawText = textOutput.content; + } + } + } else if (data.choices?.[0]?.message?.content) { + rawText = data.choices[0].message.content; + } else if (data.text) { + rawText = data.text; + } + + // Extract title from response - look for the actual title + let title = rawText; + + // Look for quoted title + const quotedMatch = rawText.match(/"([^"]{2,40})"/); + if (quotedMatch) { + title = quotedMatch[1]; + } else if (rawText.includes('\n')) { + // Take last non-empty line + const lines = rawText.split('\n').map(l => l.trim()).filter(l => l); + title = lines[lines.length - 1]; + } + + // Clean up + title = title.replace(/^["']|["']$/g, '').trim(); + title = title.replace(/[.!?:,]+$/, '').trim(); + + // Remove reasoning prefixes + title = title.replace(/^(thus|so|therefore|the title is|title|answer|output|result)[\s:]+/i, '').trim(); + + // Limit to 5 words max + const words = title.split(/\s+/); + if (words.length > 5) { + title = words.slice(0, 5).join(' '); + } + + // Fallback if extraction failed + if (!title || title.length < 2 || title.toLowerCase().includes('summarize') || title.toLowerCase().includes('message')) { + const fallbackWords = userMessage.split(/\s+/).slice(0, 4); + title = fallbackWords.map(w => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase()).join(' '); + title = title.replace(/[?!.,]+$/, ''); + } + + return NextResponse.json({ title }); + + } catch (error) { + log.error('Generate title error', { error: error.message }); + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/mcp/oauth/authorize/route.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/mcp/oauth/authorize/route.js new file mode 100644 index 000000000..d1ce0d07f --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/mcp/oauth/authorize/route.js @@ -0,0 +1,87 @@ +import { NextResponse } from 'next/server'; +import { + fetchOAuthMetadata, + registerClient, + generateCodeVerifier, + generateCodeChallenge, + signPayload, + PENDING_COOKIE, +} from '../../../../lib/mcp-oauth'; +import { createLogger } from '../../../../lib/logger'; + +function getBaseUrl(request) { + let host = request.headers.get('x-forwarded-host') || request.headers.get('host'); + const proto = request.headers.get('x-forwarded-proto') || 'http'; + host = host.replace(/:80$/, '').replace(/:443$/, ''); + return `${proto}://${host}`; +} + +export async function GET(request) { + const log = createLogger('mcp-oauth-authorize'); + + try { + const params = new URL(request.url).searchParams; + const endpoint = params.get('endpoint'); + const returnTo = params.get('returnTo') || '/settings'; + if (!endpoint) { + return NextResponse.json({ error: 'endpoint query param is required' }, { status: 400 }); + } + + const baseUrl = getBaseUrl(request); + const redirectUri = `${baseUrl}/api/mcp/oauth/callback`; + + // 1. Discover OAuth metadata from MCP server + const metadata = await fetchOAuthMetadata(endpoint); + if (!metadata) { + return NextResponse.json({ error: 'MCP server does not support OAuth 2.1' }, { status: 502 }); + } + log.info('OAuth metadata fetched', { endpoint }); + + // 2. Register this app as an OAuth client (dynamic registration) + const scopes = metadata.scopes_supported || ['read', 'write', 'generate']; + const registration = await registerClient(metadata.registration_endpoint, redirectUri, scopes); + log.info('Client registered', { clientId: registration.client_id }); + + // 3. Generate PKCE pair + const codeVerifier = generateCodeVerifier(); + const codeChallenge = generateCodeChallenge(codeVerifier); + const state = crypto.randomUUID(); + + // 4. Store pending state in a signed cookie + const pending = await signPayload({ + endpoint, + clientId: registration.client_id, + clientSecret: registration.client_secret, + codeVerifier, + state, + tokenEndpoint: metadata.token_endpoint, + redirectUri, + returnTo, + }); + + // 5. First set the cookie, then redirect via an HTML page + // (direct 307 redirect may not persist cookies in all browsers) + const authUrl = new URL(metadata.authorization_endpoint); + authUrl.searchParams.set('client_id', registration.client_id); + authUrl.searchParams.set('redirect_uri', redirectUri); + authUrl.searchParams.set('response_type', 'code'); + authUrl.searchParams.set('scope', scopes.join(' ')); + authUrl.searchParams.set('code_challenge', codeChallenge); + authUrl.searchParams.set('code_challenge_method', 'S256'); + authUrl.searchParams.set('state', state); + + const html = `Redirecting...`; + const response = new Response(html, { + status: 200, + headers: { 'Content-Type': 'text/html' }, + }); + // Only emit Secure when serving over HTTPS — http://localhost rejects Secure cookies + const isHttps = (request.headers.get('x-forwarded-proto') || 'http') === 'https'; + const cookieFlags = `Path=/; Max-Age=600; HttpOnly; SameSite=Lax${isHttps ? '; Secure' : ''}`; + response.headers.append('Set-Cookie', `${PENDING_COOKIE}=${pending}; ${cookieFlags}`); + return response; + } catch (error) { + log.error('OAuth authorize failed', { error: error.message }); + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/mcp/oauth/callback/route.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/mcp/oauth/callback/route.js new file mode 100644 index 000000000..5f3038bc2 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/mcp/oauth/callback/route.js @@ -0,0 +1,94 @@ +import { NextResponse } from 'next/server'; +import { + verifyPayload, + signPayload, + exchangeCode, + tokenCookieName, + PENDING_COOKIE, +} from '../../../../lib/mcp-oauth'; +import { createLogger } from '../../../../lib/logger'; + +function returnUrl(request, result, pending) { + const dest = pending?.returnTo || '/settings'; + let host = request.headers.get('x-forwarded-host') || request.headers.get('host'); + const proto = request.headers.get('x-forwarded-proto') || 'http'; + host = host.replace(/:80$/, '').replace(/:443$/, ''); + const base = `${proto}://${host}`; + const url = new URL(dest, base); + url.searchParams.set('mcp_auth', result); + return url.toString(); +} + +export async function GET(request) { + const log = createLogger('mcp-oauth-callback'); + + try { + const params = new URL(request.url).searchParams; + const code = params.get('code'); + const state = params.get('state'); + const error = params.get('error'); + + if (error) { + log.error('Authorization denied', { error, description: params.get('error_description') }); + return NextResponse.redirect(returnUrl(request, 'error', pending)); + } + + if (!code) { + log.error('Missing code'); + return NextResponse.redirect(returnUrl(request, 'error', null)); + } + + // 1. Read pending state from cookie + const pendingCookie = request.cookies.get(PENDING_COOKIE)?.value; + const pending = await verifyPayload(pendingCookie); + + if (!pending) { + log.error('Missing or invalid pending cookie', { + hasCookie: !!pendingCookie, + cookies: request.cookies.getAll().map(c => c.name), + }); + return NextResponse.redirect(returnUrl(request, 'error', null)); + } + + // 2. Exchange authorization code for tokens + const tokenData = await exchangeCode( + pending.tokenEndpoint, + code, + pending.codeVerifier, + pending.clientId, + pending.clientSecret, + pending.redirectUri, + ); + log.info('Token exchange successful', { endpoint: pending.endpoint }); + + // 3. Persist tokens in a signed cookie + const tokens = await signPayload({ + endpoint: pending.endpoint, + clientId: pending.clientId, + clientSecret: pending.clientSecret, + tokenEndpoint: pending.tokenEndpoint, + accessToken: tokenData.access_token, + refreshToken: tokenData.refresh_token, + expiresAt: Date.now() + (tokenData.expires_in || 3600) * 1000, + }); + + const response = NextResponse.redirect(returnUrl(request, 'success', pending)); + + // Only mark Secure when the app is actually served over HTTPS — Chrome + // rejects Secure cookies set during a redirect that lands on http://localhost. + const isHttps = (request.headers.get('x-forwarded-proto') || 'http') === 'https'; + response.cookies.set(tokenCookieName(pending.endpoint), tokens, { + httpOnly: true, + secure: isHttps, + sameSite: 'lax', + maxAge: 30 * 24 * 60 * 60, // 30 days + path: '/', + }); + response.cookies.delete(PENDING_COOKIE); + + return response; + } catch (error) { + log.error('OAuth callback failed', { error: error.message }); + return NextResponse.redirect(returnUrl(request, 'error', pending)); + } +} diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/mcp/oauth/token/route.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/mcp/oauth/token/route.js new file mode 100644 index 000000000..965fce5f1 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/mcp/oauth/token/route.js @@ -0,0 +1,50 @@ +import { NextResponse } from 'next/server'; +import { verifyPayload, signPayload, refreshAccessToken, tokenCookieName } from '../../../../lib/mcp-oauth'; + +/** + * GET /api/mcp/oauth/token?endpoint=... + * Returns the current access token for a given MCP endpoint. + * Used by the frontend to pass the token to OCI Responses API. + */ +export async function GET(request) { + const endpoint = new URL(request.url).searchParams.get('endpoint'); + if (!endpoint) { + return NextResponse.json({ error: 'endpoint is required' }, { status: 400 }); + } + + const cookieName = tokenCookieName(endpoint); + const tokenCookie = request.cookies.get(cookieName)?.value; + const tokens = await verifyPayload(tokenCookie); + + if (!tokens) { + return NextResponse.json({ hasToken: false }); + } + + // Force refresh if requested, or if expiring within 30s + const forceRefresh = new URL(request.url).searchParams.get('refresh') === 'true'; + if (forceRefresh || tokens.expiresAt < Date.now() + 30000) { + try { + const refreshed = await refreshAccessToken( + tokens.tokenEndpoint, tokens.refreshToken, tokens.clientId, tokens.clientSecret + ); + tokens.accessToken = refreshed.access_token; + tokens.refreshToken = refreshed.refresh_token || tokens.refreshToken; + tokens.expiresAt = Date.now() + (refreshed.expires_in || 3600) * 1000; + + const response = NextResponse.json({ hasToken: true, accessToken: tokens.accessToken }); + const isHttps = (request.headers.get('x-forwarded-proto') || 'http') === 'https'; + response.cookies.set(cookieName, await signPayload(tokens), { + httpOnly: true, + secure: isHttps, + sameSite: 'lax', + maxAge: 30 * 24 * 60 * 60, + path: '/', + }); + return response; + } catch { + return NextResponse.json({ hasToken: false }); + } + } + + return NextResponse.json({ hasToken: true, accessToken: tokens.accessToken }); +} diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/mcp/oauth2-cc/token/route.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/mcp/oauth2-cc/token/route.js new file mode 100644 index 000000000..b9dbea591 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/mcp/oauth2-cc/token/route.js @@ -0,0 +1,107 @@ +import { NextResponse } from 'next/server'; +import { createLogger } from '../../../../lib/logger'; + +/** + * POST /api/mcp/oauth2-cc/token + * Body: { tokenUrl, clientId, clientSecret, scope? } + * + * OAuth 2.0 Client Credentials Grant (RFC 6749 §4.4). + * Server-side because browsers usually can't reach the token endpoint due to CORS, + * and Basic Auth credentials shouldn't leave through the browser fetch. + * + * Tokens are cached in-process by (tokenUrl, clientId, scope) until ~60s before expiry. + */ + +// In-memory cache shared across requests in the same Node process +// Key: `${tokenUrl}::${clientId}::${scope || ''}` +// Value: { accessToken, expiresAt } +const tokenCache = new Map(); +const REFRESH_BUFFER_MS = 60_000; // refresh 60s before actual expiry + +export async function POST(request) { + const log = createLogger('mcp-oauth2-cc'); + + let body; + try { + body = await request.json(); + } catch { + return NextResponse.json({ error: 'Invalid JSON body' }, { status: 400 }); + } + + const { tokenUrl, clientId, clientSecret, scope } = body || {}; + + if (!tokenUrl || !clientId || !clientSecret) { + return NextResponse.json( + { error: 'tokenUrl, clientId and clientSecret are required' }, + { status: 400 } + ); + } + + const cacheKey = `${tokenUrl}::${clientId}::${scope || ''}`; + const cached = tokenCache.get(cacheKey); + if (cached && cached.expiresAt > Date.now() + REFRESH_BUFFER_MS) { + return NextResponse.json({ + accessToken: cached.accessToken, + expiresAt: cached.expiresAt, + cached: true, + }); + } + + // Build form body. Many enterprise IdPs (IDCS included) reject Basic Auth and + // only accept creds in the body. Use body-creds for max compatibility — same + // pattern as the working /api/mcp proxy. + const params = new URLSearchParams({ + grant_type: 'client_credentials', + client_id: clientId, + client_secret: clientSecret, + }); + if (scope) params.set('scope', scope); + + let res; + try { + res = await fetch(tokenUrl, { + method: 'POST', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + 'Accept': 'application/json', + }, + body: params.toString(), + }); + } catch (err) { + log.error('Token endpoint unreachable', { tokenUrl, error: err.message }); + return NextResponse.json( + { error: `Token endpoint unreachable: ${err.message}` }, + { status: 502 } + ); + } + + if (!res.ok) { + const errText = await res.text().catch(() => ''); + log.warn('Token request failed', { tokenUrl, status: res.status, body: errText.slice(0, 500) }); + return NextResponse.json( + { error: `Token request failed (${res.status}): ${errText.slice(0, 300)}` }, + { status: res.status } + ); + } + + const data = await res.json().catch(() => null); + if (!data || !data.access_token) { + return NextResponse.json( + { error: 'Token endpoint did not return access_token' }, + { status: 502 } + ); + } + + const expiresInMs = (typeof data.expires_in === 'number' ? data.expires_in : 3600) * 1000; + const expiresAt = Date.now() + expiresInMs; + + tokenCache.set(cacheKey, { accessToken: data.access_token, expiresAt }); + log.info('Token issued', { tokenUrl, clientId, expiresInMs }); + + return NextResponse.json({ + accessToken: data.access_token, + expiresAt, + tokenType: data.token_type || 'Bearer', + cached: false, + }); +} diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/mcp/route.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/mcp/route.js new file mode 100644 index 000000000..dbb4e9705 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/mcp/route.js @@ -0,0 +1,213 @@ +import { NextResponse } from 'next/server'; +import { createLogger } from '../../lib/logger'; +import { verifyPayload, signPayload, refreshAccessToken, tokenCookieName } from '../../lib/mcp-oauth'; + +// Store session IDs per endpoint (in production, use Redis or similar) +const sessionIds = new Map(); + +// Cache OAuth tokens per token URL + client ID +const oauthTokenCache = new Map(); + +async function getOAuthToken(tokenUrl, clientId, clientSecret, scope) { + const cacheKey = `${tokenUrl}:${clientId}`; + const cached = oauthTokenCache.get(cacheKey); + if (cached && cached.expiresAt > Date.now() + 30000) { + return cached.accessToken; + } + + const body = new URLSearchParams({ + grant_type: 'client_credentials', + client_id: clientId, + client_secret: clientSecret, + }); + if (scope) body.set('scope', scope); + + const res = await fetch(tokenUrl, { + method: 'POST', + headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, + body, + }); + + if (!res.ok) { + const errText = await res.text(); + throw new Error(`OAuth token request failed: ${res.status} ${errText}`); + } + + const data = await res.json(); + if (!data.access_token) { + throw new Error(`OAuth token response missing access_token: ${JSON.stringify(data).slice(0, 200)}`); + } + oauthTokenCache.set(cacheKey, { + accessToken: data.access_token, + expiresAt: Date.now() + (data.expires_in || 3600) * 1000, + }); + + return data.access_token; +} + +export async function POST(request) { + try { + const { endpoint, method, params = {}, sessionId, authType, authKey, oauth } = await request.json(); + + if (!endpoint) { + return NextResponse.json({ error: 'endpoint is required' }, { status: 400 }); + } + + if (!method) { + return NextResponse.json({ error: 'method is required' }, { status: 400 }); + } + + const url = endpoint; + + // Build JSON-RPC request + const jsonRpcRequest = { + jsonrpc: '2.0', + id: Date.now(), + method: method, + params: params + }; + + const headers = { + 'Content-Type': 'application/json', + 'Accept': 'application/json, text/event-stream' + }; + + // Add auth headers if provided + let updatedTokenCookie = null; // set if oauth2.1 token was refreshed + + if (authType === 'oauth2.1') { + // Read tokens from httpOnly cookie set by /api/mcp/oauth/callback + const cookieName = tokenCookieName(endpoint); + const tokenCookie = request.cookies.get(cookieName)?.value; + const tokens = await verifyPayload(tokenCookie); + + if (!tokens) { + return NextResponse.json({ + error: 'needs_auth', + authorizeUrl: `/api/mcp/oauth/authorize?endpoint=${encodeURIComponent(endpoint)}`, + }, { status: 401 }); + } + + // Refresh if token expires within 30s + if (tokens.expiresAt < Date.now() + 30000) { + try { + const refreshed = await refreshAccessToken( + tokens.tokenEndpoint, tokens.refreshToken, tokens.clientId, tokens.clientSecret + ); + tokens.accessToken = refreshed.access_token; + tokens.refreshToken = refreshed.refresh_token || tokens.refreshToken; + tokens.expiresAt = Date.now() + (refreshed.expires_in || 3600) * 1000; + updatedTokenCookie = { name: cookieName, value: await signPayload(tokens) }; + } catch { + return NextResponse.json({ + error: 'needs_auth', + authorizeUrl: `/api/mcp/oauth/authorize?endpoint=${encodeURIComponent(endpoint)}`, + }, { status: 401 }); + } + } + + headers['Authorization'] = `Bearer ${tokens.accessToken}`; + } else if (authType === 'oauth2' && oauth) { + const token = await getOAuthToken(oauth.tokenUrl, oauth.clientId, oauth.clientSecret, oauth.scope); + headers['Authorization'] = `Bearer ${token}`; + } else if (authType && authKey) { + if (authType === 'api-key') { + headers['X-API-KEY'] = authKey; + } else if (authType === 'bearer') { + headers['Authorization'] = `Bearer ${authKey}`; + } + } + + // Add session ID if provided (for subsequent requests after initialize) + if (sessionId && method !== 'initialize') { + headers['Mcp-Session-Id'] = sessionId; + } + + const log = createLogger('mcp-proxy'); + log.info('MCP request', { method, params: JSON.stringify(params).slice(0, 200) }); + + const response = await fetch(url, { + method: 'POST', + headers, + body: JSON.stringify(jsonRpcRequest) + }); + + // Check for session ID in response headers + const newSessionId = response.headers.get('Mcp-Session-Id'); + if (newSessionId) { + log.debug('MCP session ID', { sessionId: newSessionId }); + } + + const responseText = await response.text(); + log.debug('MCP raw response', { body: responseText.slice(0, 500) }); + + if (!response.ok) { + log.error('MCP server error', { status: response.status, body: responseText.slice(0, 500) }); + + // If the MCP server rejects our OAuth 2.1 token, clear it and ask for re-auth + if (authType === 'oauth2.1' && response.status === 401) { + const clearResponse = NextResponse.json({ + error: 'needs_auth', + authorizeUrl: `/api/mcp/oauth/authorize?endpoint=${encodeURIComponent(endpoint)}`, + }, { status: 401 }); + clearResponse.cookies.delete(tokenCookieName(endpoint)); + return clearResponse; + } + + return NextResponse.json( + { error: `MCP Error: ${response.status}`, details: responseText }, + { status: response.status } + ); + } + + // Try to parse as JSON, handle different formats + let data; + try { + data = JSON.parse(responseText); + } catch (e) { + // Response might be in a different format (e.g., "id: xxx\ndata: {...}") + // Try to extract JSON from SSE-like format + const lines = responseText.split('\n'); + for (const line of lines) { + if (line.startsWith('data: ')) { + try { + data = JSON.parse(line.slice(6)); + break; + } catch (e2) { + // Continue trying + } + } + } + if (!data) { + // Return raw text if can't parse + data = { raw: responseText }; + } + } + + log.debug('MCP parsed response', { result: JSON.stringify(data).slice(0, 500) }); + + // Include session ID in response if present + if (newSessionId) { + data._sessionId = newSessionId; + } + + // Return the result, persisting refreshed token if needed + const jsonResponse = NextResponse.json(data); + if (updatedTokenCookie) { + const isHttps = (request.headers.get('x-forwarded-proto') || 'http') === 'https'; + jsonResponse.cookies.set(updatedTokenCookie.name, updatedTokenCookie.value, { + httpOnly: true, + secure: isHttps, + sameSite: 'lax', + maxAge: 30 * 24 * 60 * 60, + path: '/', + }); + } + return jsonResponse; + + } catch (error) { + const log = createLogger('mcp-proxy'); + log.error('MCP proxy error', { error: error.message }); + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/models/route.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/models/route.js new file mode 100644 index 000000000..6f10ce1f5 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/models/route.js @@ -0,0 +1,51 @@ +import { NextResponse } from 'next/server'; +import * as oci from 'oci-sdk'; +import { getOCIAuth } from '../../lib/oci-auth'; +import { createLogger } from '../../lib/logger'; + +export async function GET() { + const requestId = crypto.randomUUID(); + const log = createLogger('models-api', { requestId }); + + try { + const compartmentId = process.env.OCI_COMPARTMENT_ID; + + if (!compartmentId) { + return NextResponse.json( + { error: 'OCI_COMPARTMENT_ID is required' }, + { status: 500 } + ); + } + + const auth = await getOCIAuth(); + const client = new oci.generativeai.GenerativeAiClient({ + authenticationDetailsProvider: auth, + }); + + // List models available in the compartment + const response = await client.listModels({ + compartmentId: compartmentId, + }); + + // Filter and format models for the frontend + const models = response.modelCollection.items + .filter(model => model.lifecycleState === 'ACTIVE') + .map(model => ({ + id: model.id, + displayName: model.displayName, + vendor: model.vendor, + version: model.version, + capabilities: model.capabilities, + type: model.type, + })); + + return NextResponse.json({ models }); + + } catch (error) { + log.error('Error listing models', { error: error.message }); + return NextResponse.json( + { error: error.message || 'Failed to list models' }, + { status: 500 } + ); + } +} diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/responses/route.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/responses/route.js new file mode 100644 index 000000000..95b255779 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/responses/route.js @@ -0,0 +1,1028 @@ +import { NextResponse } from 'next/server'; +import { ociRequest } from '../../lib/oci-proxy'; +import { Langfuse } from 'langfuse'; +import { createLogger } from '../../lib/logger'; + +// Allow long-running MCP tool calls (up to 5 minutes) +export const maxDuration = 300; + +export async function POST(request) { + const requestId = crypto.randomUUID(); + const log = createLogger('responses-api', { requestId }); + + try { + const { input, conversationId, model, systemPrompt, tools, reasoning, previousResponseId } = await request.json(); + + if (!input) { + return NextResponse.json({ error: 'Input is required' }, { status: 400 }); + } + + const modelId = model || 'openai.gpt-4.1'; + + // Multi-agent models use /v1, all others use /openai/v1 + const basePath = modelId.includes('multi-agent') ? '/v1' : '/openai/v1'; + + // Build request - OCI manages history via conversation parameter + // For multimodal input (arrays with input_text/input_image), wrap in message object + let formattedInput = input; + if (Array.isArray(input) && input.some(item => item.type === 'input_text' || item.type === 'input_image')) { + formattedInput = [{ + type: 'message', + role: 'user', + content: input + }]; + } + + const requestBody = { + model: modelId, + input: formattedInput, + stream: true, + store: true, // Let OCI store messages automatically + max_output_tokens: 65535, + }; + + // Add system instructions if provided + if (systemPrompt) { + requestBody.instructions = systemPrompt; + } + + // Add conversation ID if continuing existing conversation + if (conversationId) { + requestBody.conversation = conversationId; + } + + // Add MCP tools if provided (OCI handles execution natively) + if (tools && Array.isArray(tools) && tools.length > 0) { + requestBody.tools = tools; + } + + // Add reasoning params (effort + summary) — only for reasoning-capable models + if (reasoning && typeof reasoning === 'object') { + const reasoningModels = ['o4-mini', 'gpt-5.4', 'grok-4-reasoning', 'o3', 'o4']; + const supportsReasoning = reasoningModels.some(rm => modelId.includes(rm)); + if (supportsReasoning) { + requestBody.reasoning = reasoning; + } + } + + // Chain to a previous response (for function calling round-trips) + if (previousResponseId) { + requestBody.previous_response_id = previousResponseId; + } + + log.info('OCI request payload', { + model: requestBody.model, + hasInstructions: !!requestBody.instructions, + instructionsLen: requestBody.instructions?.length || 0, + hasConversation: !!requestBody.conversation, + toolCount: requestBody.tools?.length || 0, + toolTypes: requestBody.tools?.map(t => t.type) || [], + stream: requestBody.stream, + store: requestBody.store, + max_output_tokens: requestBody.max_output_tokens, + }); + + let response = await ociRequest('POST', '/responses', { + body: requestBody, + basePath, + extraHeaders: { accept: 'text/event-stream' }, + }); + + // Log OCI request ID for debugging/support + const opcRequestId = response.headers.get('opc-request-id'); + if (opcRequestId) log.info('OCI request started', { opcRequestId }); + + if (!response.ok) { + const errorText = await response.text(); + log.error('OCI API error', { status: response.status, body: errorText.slice(0, 4000), opcRequestId }); + + // MCP tool auth expired — tell client to re-authorize + // 424 + external_connector_error typically indicates either expired OAuth tokens + // or upstream MCP failure; in both cases, re-authorizing is the user's best action. + if (response.status === 424 && errorText.includes('external_connector_error')) { + // Try to surface which MCP server failed so the UI can open the correct + // re-authorize flow instead of guessing. + let failedServer = null; + try { + const parsed = JSON.parse(errorText); + failedServer = parsed?.error?.server_label + || parsed?.error?.metadata?.server_label + || parsed?.error?.details?.server_label + || null; + if (!failedServer && typeof parsed?.error?.message === 'string') { + const m = parsed.error.message.match(/server[_ ]?(?:label)?\s*[:=]?\s*['"]?([a-zA-Z0-9_-]+)['"]?/i); + if (m) failedServer = m[1]; + } + } catch { /* errorText not JSON */ } + + // Look up the actual server_url + headers from the request we just sent, + // so the client has the exact endpoint (no fragile name-sanitize match). + let failedServerUrl = null; + if (failedServer && Array.isArray(requestBody.tools)) { + const tool = requestBody.tools.find(t => t.type === 'mcp' && t.server_label === failedServer); + failedServerUrl = tool?.server_url || null; + } + + return NextResponse.json( + { error: 'mcp_auth_expired', server_label: failedServer, server_url: failedServerUrl, details: errorText }, + { status: 424 } + ); + } + // Retry without file_search if a VectorStore is not found (stale/deleted VS) + else if (response.status === 400 && errorText.includes('VectorStore') && errorText.includes('not found') && requestBody.tools?.some(t => t.type === 'file_search')) { + log.warn('Retrying without file_search (stale vector store)'); + requestBody.tools = requestBody.tools.filter(t => t.type !== 'file_search'); + if (requestBody.tools.length === 0) delete requestBody.tools; + + response = await ociRequest('POST', '/responses', { + body: requestBody, + basePath, + extraHeaders: { accept: 'text/event-stream' }, + }); + + if (!response.ok) { + const retryError = await response.text(); + const retryOpc = response.headers.get('opc-request-id'); + return NextResponse.json({ + error: `OCI API Error: ${response.status} - ${retryError}`, + opc_request_id: retryOpc, + model: modelId, + timestamp: new Date().toISOString(), + }, { status: response.status }); + } + } else { + return NextResponse.json({ + error: `OCI API Error: ${response.status} - ${errorText}`, + opc_request_id: opcRequestId, + model: modelId, + timestamp: new Date().toISOString(), + }, { status: response.status }); + } + } + + // LangFuse tracing (non-blocking, fire-and-forget) + let langfuseTrace = null; + let langfuseGeneration = null; + const langfuseEnabled = process.env.LANGFUSE_SECRET_KEY && process.env.LANGFUSE_PUBLIC_KEY; + let langfuse = null; + if (langfuseEnabled) { + try { + langfuse = new Langfuse({ + secretKey: process.env.LANGFUSE_SECRET_KEY, + publicKey: process.env.LANGFUSE_PUBLIC_KEY, + baseUrl: process.env.LANGFUSE_BASE_URL || 'https://cloud.langfuse.com', + }); + const inputPreview = typeof input === 'string' ? input.slice(0, 200) : JSON.stringify(input).slice(0, 200); + langfuseTrace = langfuse.trace({ + name: 'oci-responses-api', + metadata: { model: modelId, conversationId, hasTools: !!(tools?.length), basePath }, + input: inputPreview, + }); + langfuseGeneration = langfuseTrace.generation({ + name: 'llm-call', + model: modelId, + input: formattedInput, + metadata: { systemPrompt: systemPrompt?.slice(0, 500), tools: tools?.map(t => t.type || t.name) }, + }); + } catch (e) { + log.warn('LangFuse init error', { error: e.message }); + } + } + + // Stream the response back to the client + const encoder = new TextEncoder(); + const stream = new ReadableStream({ + async start(controller) { + const reader = response.body.getReader(); + const decoder = new TextDecoder(); + let buffer = ''; + const startTime = Date.now(); + let fullOutputText = ''; + let toolCalls = []; + const fileSearchOutputsSent = new Set(); + let usageData = null; + let responseCompleted = false; + let completedResponseData = null; + let lastEventType = null; + let eventCount = 0; + // When OCI sends `event: error`, the following `data:` line carries the real + // error payload (provider message, code, details). Capture it to surface to UI. + let pendingErrorEvent = false; + + // ── Request trace: structured timeline for diagnostics ── + const trace = { + requestId, + opcRequestId: null, + model: modelId, + startedAt: new Date().toISOString(), + events: [], // [{ts, type, detail}] + tools: {}, // {itemId: {tool, server, status, startMs, endMs, outputSize}} + completion: null, // {status, outputItems, outputTokens, totalTokens, elapsed} + error: null, // string if something went wrong + }; + const traceEvent = (type, detail) => { + trace.events.push({ ts: Date.now() - startTime, type, ...(detail || {}) }); + }; + + // Send thinking indicator IMMEDIATELY when stream starts + log.info('Stream started'); + controller.enqueue(encoder.encode(JSON.stringify({ thinking: true }) + '\n')); + + // Stall detection: if OCI sends no data for STALL_TIMEOUT_MS, abort the stream + const STALL_TIMEOUT_MS = 120_000; // 2 minutes + let lastChunkTime = Date.now(); + let stalled = false; + + const readWithTimeout = async () => { + const timeout = new Promise((_, reject) => { + const id = setTimeout(() => { + clearTimeout(id); + reject(new Error('OCI_STREAM_STALL')); + }, STALL_TIMEOUT_MS); + // Store the timer id so we can clear it when we get data + readWithTimeout._timer = id; + }); + try { + const result = await Promise.race([reader.read(), timeout]); + if (readWithTimeout._timer) clearTimeout(readWithTimeout._timer); + lastChunkTime = Date.now(); + return result; + } catch (e) { + if (readWithTimeout._timer) clearTimeout(readWithTimeout._timer); + throw e; + } + }; + + try { + while (true) { + let readResult; + try { + readResult = await readWithTimeout(); + } catch (stallErr) { + if (stallErr.message === 'OCI_STREAM_STALL') { + stalled = true; + const stallElapsed = Date.now() - startTime; + log.error('Stream stalled — no data from OCI', { elapsed: stallElapsed, lastChunkAge: Date.now() - lastChunkTime, opcRequestId }); + trace.opcRequestId = opcRequestId; + trace.error = `Stream stalled — no data from OCI for 2+ minutes. Total elapsed: ${Math.round(stallElapsed / 1000)}s, ${eventCount} events received, last event: "${lastEventType || 'none'}".`; + traceEvent('stall', { elapsed: stallElapsed, lastEventType }); + controller.enqueue(encoder.encode(JSON.stringify({ + error: trace.error, + done: true, + trace, + }) + '\n')); + break; + } + throw stallErr; + } + const { done, value } = readResult; + if (done) break; + + const elapsed = Date.now() - startTime; + const chunk = decoder.decode(value, { stream: true }); + log.debug('Chunk received', { elapsed, bytes: chunk.length }); + + buffer += chunk; + const lines = buffer.split('\n'); + buffer = lines.pop() || ''; // Keep incomplete line in buffer + if (buffer.length > 1000) { + log.debug('Large buffer pending', { bufferLen: buffer.length, elapsed, preview: buffer.substring(0, 200) }); + } + + for (const line of lines) { + // Log ALL non-data lines — never silently skip + if (line.trim() && !line.startsWith('data: ')) { + // SSE event lines (event:, id:, retry:) get logged as info, not debug + log.info('SSE control line', { elapsed: Date.now() - startTime, line: line.trim() }); + } + + // Handle SSE error/event lines — catch ANY event type, not just "error" + const trimmedLine = line.trim(); + if (trimmedLine.startsWith('event:')) { + const eventName = trimmedLine.slice(6).trim(); + log.warn('SSE event received', { event: eventName, elapsed: Date.now() - startTime }); + if (eventName === 'error') { + log.error('OCI upstream error event — waiting for data payload', { opcRequestId, elapsed: Date.now() - startTime }); + // Flag the next `data:` line as the payload for this error event so + // we can forward OCI's actual error message/code to the client. + pendingErrorEvent = true; + } + continue; + } + + if (!line.startsWith('data: ')) continue; + + try { + const data = JSON.parse(line.slice(6)); + const elapsed = Date.now() - startTime; + + // This data line is the payload of a preceding `event: error` SSE line. + // Forward the full error from the provider to the client + trace so the + // user sees the actual cause instead of a generic message. + if (pendingErrorEvent) { + pendingErrorEvent = false; + responseCompleted = true; + const providerMessage = data.error?.message || data.message || data.error || JSON.stringify(data); + const providerCode = data.error?.code || data.code || null; + const providerType = data.error?.type || data.type || null; + log.error('OCI upstream error payload', { opcRequestId, elapsed, providerMessage, providerCode, providerType, raw: JSON.stringify(data).substring(0, 2000) }); + trace.opcRequestId = opcRequestId; + trace.error = `OCI upstream error after ${Math.round(elapsed / 1000)}s: ${providerMessage}${providerCode ? ` [code: ${providerCode}]` : ''}${providerType ? ` [type: ${providerType}]` : ''}. opc-request-id: ${opcRequestId || 'unknown'}.`; + traceEvent('upstream_error_payload', { elapsed, providerMessage, providerCode, providerType }); + const friendly = providerMessage && providerMessage !== '[object Object]' + ? `Upstream error: ${providerMessage}${providerCode ? ` (${providerCode})` : ''}${opcRequestId ? ` — opc-request-id: ${opcRequestId}` : ''}` + : `The model provider returned an error${opcRequestId ? ` (opc-request-id: ${opcRequestId})` : ''}.`; + controller.enqueue(encoder.encode(JSON.stringify({ + error: friendly, + done: true, + trace, + raw_error: data, + }) + '\n')); + completedResponseData = null; + continue; + } + + const eventType = data.type; + const itemType = data.item?.type; + const itemStatus = data.item?.status; + const itemId = data.item?.id || data.item_id; + lastEventType = eventType; + eventCount++; + + // DEBUG: Log every SSE event type for full visibility + log.debug('SSE event', { event: eventType, itemType, itemId: itemId?.slice(-12), elapsed, lineLen: line.length }); + + // ═══ LOG EVERY EVENT — no silent drops ═══ + // Lifecycle events (created, in_progress) — debug level + if (eventType === 'response.created' || eventType === 'response.in_progress') { + log.debug('Response lifecycle', { event: eventType, elapsed, responseId: data.response?.id }); + } + + // ═══ TEXT STREAMING ═══ + else if (eventType === 'response.output_text.delta' && data.delta) { + fullOutputText += data.delta; + controller.enqueue(encoder.encode(JSON.stringify({ text: data.delta }) + '\n')); + } + else if (eventType === 'response.output_text.done') { + controller.enqueue(encoder.encode(JSON.stringify({ text_done: data.text }) + '\n')); + } + + // ═══ OUTPUT ITEMS ADDED ═══ + else if (eventType === 'response.output_item.added') { + log.info('Output item added', { itemType, itemId, elapsed, server: data.item?.server_label, phase: data.item?.phase }); + + if (itemType === 'mcp_list_tools') { + controller.enqueue(encoder.encode(JSON.stringify({ + mcp: { type: 'connecting', server: data.item.server_label } + }) + '\n')); + } + else if (itemType === 'mcp_call') { + toolCalls.push({ id: itemId, tool: data.item.name, server: data.item.server_label }); + trace.tools[itemId] = { tool: data.item.name, server: data.item.server_label, status: 'calling', startMs: elapsed }; + traceEvent('tool_call', { tool: data.item.name, server: data.item.server_label, id: itemId }); + log.info('MCP tool calling', { tool: data.item.name, server: data.item.server_label, args: (data.item.arguments || '').substring(0, 300), elapsed }); + controller.enqueue(encoder.encode(JSON.stringify({ + mcp: { type: 'calling', id: itemId, server: data.item.server_label, tool: data.item.name, arguments: data.item.arguments } + }) + '\n')); + } + else if (itemType === 'web_search_call') { + const query = data.item.action?.query || ''; + controller.enqueue(encoder.encode(JSON.stringify({ + mcp: { type: 'calling', id: itemId, server: 'web_search', tool: 'web_search', arguments: query ? JSON.stringify({ query }) : '' } + }) + '\n')); + } + else if (itemType === 'code_interpreter_call') { + controller.enqueue(encoder.encode(JSON.stringify({ + mcp: { type: 'calling', id: itemId, server: 'code_interpreter', tool: 'code_interpreter', arguments: '' } + }) + '\n')); + } + else if (itemType === 'image_generation_call') { + controller.enqueue(encoder.encode(JSON.stringify({ + mcp: { type: 'calling', id: itemId, server: 'image_generation', tool: 'image_generation', arguments: '' } + }) + '\n')); + } + else if (itemType === 'nl2sql_call') { + const query = data.item.input_natural_language_query || data.item.query || ''; + controller.enqueue(encoder.encode(JSON.stringify({ + mcp: { type: 'calling', id: itemId, server: 'nl2sql', tool: 'nl2sql', arguments: query ? JSON.stringify({ query }) : '' } + }) + '\n')); + } + // File search added — emit calling chip early with vector_store info + // (query isn't available yet — OCI only sends it in output_item.done). + else if (itemType === 'file_search_call') { + const fsToolCfgs = (tools || []).filter(t => t.type === 'file_search'); + const vsIdsForCfg = fsToolCfgs.flatMap(t => t.vector_store_ids || []); + const maxNumResults = fsToolCfgs[0]?.max_num_results || null; + controller.enqueue(encoder.encode(JSON.stringify({ + mcp: { + type: 'calling', + id: itemId, + server: 'file_search', + tool: 'file_search', + arguments: JSON.stringify({ vector_store_ids: vsIdsForCfg, max_num_results: maxNumResults }), + } + }) + '\n')); + } + else if (itemType === 'reasoning') { + controller.enqueue(encoder.encode(JSON.stringify({ reasoning: { type: 'start' } }) + '\n')); + } + else if (itemType === 'message') { + log.debug('Message item added', { role: data.item.role, phase: data.item.phase, elapsed }); + } + } + + // ═══ OUTPUT ITEMS DONE ═══ + else if (eventType === 'response.output_item.done') { + log.info('Output item done', { itemType, itemId, status: itemStatus, elapsed, tool: data.item?.name, server: data.item?.server_label }); + + // MCP tool completed + if (itemType === 'mcp_call') { + const rawOutput = data.item.output || ''; + const outputSize = rawOutput.length; + const MAX_SIZE = 5000; + let truncatedOutput = rawOutput; + let truncated = false; + + const containsBinaryData = rawOutput.includes('"audioBase64"') || rawOutput.includes('"imageBase64"') || rawOutput.includes('"fileBase64"'); + const isError = itemStatus === 'incomplete' || itemStatus === 'failed'; + + // Update trace + if (trace.tools[itemId]) { + trace.tools[itemId].status = isError ? 'failed' : 'completed'; + trace.tools[itemId].endMs = elapsed; + trace.tools[itemId].outputSize = outputSize; + } + traceEvent(isError ? 'tool_failed' : 'tool_done', { tool: data.item.name, id: itemId, outputSize, status: itemStatus }); + + if (isError) { + log.error('MCP TOOL FAILED', { tool: data.item.name, server: data.item.server_label, status: itemStatus, output: rawOutput.substring(0, 2000), elapsed }); + } else { + log.info('MCP tool succeeded', { tool: data.item.name, server: data.item.server_label, outputSize, elapsed }); + } + + if (outputSize > MAX_SIZE && !containsBinaryData && !isError) { + const head = rawOutput.slice(0, 2000); + const tail = rawOutput.slice(-1000); + truncatedOutput = `${head}\n\n... [${(outputSize - 3000).toLocaleString()} chars omitted] ...\n\n${tail}`; + truncated = true; + } + + controller.enqueue(encoder.encode(JSON.stringify({ + mcp: { type: 'tool_output', id: itemId, tool: data.item.name, server: data.item.server_label, output: truncatedOutput, outputSize, truncated, arguments: data.item.arguments } + }) + '\n')); + // Mark this tool as having sent its output (for dedup in response.completed) + const tc = toolCalls.find(t => (t.id === itemId) || (t.tool === data.item.name && t.server === data.item.server_label && !t.outputSent)); + if (tc) { tc.outputSent = true; tc.id = tc.id || itemId; } + // Update trace — if completion arrives after response.completed, this still marks it done + if (trace.tools[itemId]) trace.tools[itemId].status = 'completed'; + } + // Web search completed + else if (itemType === 'web_search_call') { + const query = data.item.action?.query || 'web search'; + controller.enqueue(encoder.encode(JSON.stringify({ + mcp: { type: 'tool_output', tool: 'web_search', server: 'web_search', output: query } + }) + '\n')); + } + // File search completed — emit tool_output with id so the chip + // can show queries/vector_stores/chunk count instead of just "File Search" + else if (itemType === 'file_search_call') { + const queries = data.item.queries || []; + const fsToolCfgs = (tools || []).filter(t => t.type === 'file_search'); + const vsIdsForCfg = fsToolCfgs.flatMap(t => t.vector_store_ids || []); + const maxNumResults = fsToolCfgs[0]?.max_num_results || null; + const summary = queries.length > 0 + ? `Searched: ${queries.map(q => `"${q}"`).join(', ')}` + : 'Search completed'; + fileSearchOutputsSent.add(itemId); + controller.enqueue(encoder.encode(JSON.stringify({ + mcp: { + type: 'tool_output', + id: itemId, + tool: 'file_search', + server: 'file_search', + output: summary, + arguments: JSON.stringify({ queries, vector_store_ids: vsIdsForCfg, max_num_results: maxNumResults }), + } + }) + '\n')); + } + // Code interpreter completed + else if (itemType === 'code_interpreter_call') { + const results = data.item.outputs || data.item.results || []; + const outputText = results.map(r => r.logs || r.output || r.text || '').join('\n').trim(); + controller.enqueue(encoder.encode(JSON.stringify({ + code_execution: { code: data.item.code || data.item.input || '', output: outputText, containerId: data.item.container_id || null } + }) + '\n')); + } + // NL2SQL completed + else if (itemType === 'nl2sql_call') { + const sql = data.item.generated_sql || data.item.sql || ''; + const results = data.item.results || data.item.output || ''; + const output = sql ? `**Generated SQL:**\n\`\`\`sql\n${sql}\n\`\`\`${results ? `\n\n**Results:**\n${typeof results === 'string' ? results : JSON.stringify(results, null, 2)}` : ''}` : 'Query completed'; + controller.enqueue(encoder.encode(JSON.stringify({ + mcp: { type: 'tool_output', id: itemId, tool: 'nl2sql', server: 'nl2sql', output, arguments: data.item.input_natural_language_query || data.item.query || '' } + }) + '\n')); + } + // Image generation completed + else if (itemType === 'image_generation_call') { + controller.enqueue(encoder.encode(JSON.stringify({ generated_image: data.item.result || '' }) + '\n')); + } + // Function call completed + else if (itemType === 'function_call') { + controller.enqueue(encoder.encode(JSON.stringify({ + function_call: { id: itemId, callId: data.item.call_id, name: data.item.name, arguments: data.item.arguments } + }) + '\n')); + } + // Reasoning item done — signal end-of-reasoning to the UI + else if (itemType === 'reasoning') { + controller.enqueue(encoder.encode(JSON.stringify({ + reasoning: { type: 'item_end', id: itemId } + }) + '\n')); + } + // Message item done — extract final annotations from content parts + else if (itemType === 'message') { + const itemAnnotations = (data.item.content || []) + .flatMap(part => part.annotations || []) + .filter(a => a.type === 'url_citation' || a.type === 'file_citation'); + if (itemAnnotations.length > 0) { + controller.enqueue(encoder.encode(JSON.stringify({ annotations: itemAnnotations }) + '\n')); + } + } + + // Surface any non-completed status to the client. + // mcp_call already has its own handling above; others (message, reasoning, etc.) + // need an explicit signal so the UI doesn't show incomplete output as final. + if (itemStatus && itemStatus !== 'completed') { + log.error('Output item finished with non-completed status', { + itemType, itemId, status: itemStatus, tool: data.item?.name, server: data.item?.server_label, + output: (data.item?.output || '').substring(0, 2000), elapsed + }); + if (itemType !== 'mcp_call') { + controller.enqueue(encoder.encode(JSON.stringify({ + item_error: { id: itemId, itemType, status: itemStatus } + }) + '\n')); + } + } + } + + // ═══ MCP LIFECYCLE EVENTS ═══ + else if (eventType === 'response.mcp_list_tools.in_progress') { + log.debug('MCP list tools in progress', { itemId, elapsed }); + } + else if (eventType === 'response.mcp_list_tools.completed') { + log.debug('MCP list tools completed', { itemId, elapsed }); + } + else if (eventType === 'response.mcp_call.in_progress') { + log.debug('MCP call in progress', { itemId, elapsed }); + } + else if (eventType === 'response.mcp_call.completed') { + log.info('MCP call completed (OCI side)', { itemId, elapsed }); + } + else if (eventType === 'response.mcp_call.failed') { + log.error('MCP CALL FAILED (OCI side)', { itemId, elapsed, data: JSON.stringify(data).substring(0, 1000) }); + } + + // ═══ CODE INTERPRETER EVENTS ═══ + // Stream Python code being written by the interpreter token-by-token, + // and surface execution phases (in_progress → interpreting → completed) + // so the UI can show real-time code + status. + else if (eventType === 'response.code_interpreter_call.in_progress') { + controller.enqueue(encoder.encode(JSON.stringify({ + code_status: { id: itemId, status: 'in_progress' } + }) + '\n')); + } + else if (eventType === 'response.code_interpreter_call_code.delta' && data.delta) { + controller.enqueue(encoder.encode(JSON.stringify({ + code_delta: { id: itemId, text: data.delta } + }) + '\n')); + } + else if (eventType === 'response.code_interpreter_call_code.done') { + controller.enqueue(encoder.encode(JSON.stringify({ + code_delta: { id: itemId, done: true, text: data.code || '' } + }) + '\n')); + } + else if (eventType === 'response.code_interpreter_call.interpreting') { + controller.enqueue(encoder.encode(JSON.stringify({ + code_status: { id: itemId, status: 'interpreting' } + }) + '\n')); + } + else if (eventType === 'response.code_interpreter_call.completed') { + controller.enqueue(encoder.encode(JSON.stringify({ + code_status: { id: itemId, status: 'completed' } + }) + '\n')); + } + + // ═══ INLINE ANNOTATIONS (emitted during streaming) ═══ + else if (eventType === 'response.output_text.annotation.added') { + const ann = data.annotation; + if (ann && (ann.type === 'url_citation' || ann.type === 'file_citation')) { + controller.enqueue(encoder.encode(JSON.stringify({ + annotations: [ann] + }) + '\n')); + } + } + + // ═══ FILE SEARCH EVENTS ═══ + else if (eventType === 'response.file_search_call.in_progress') { + // Defensive: same payload as the output_item.added branch above so that + // the chip is created even if OCI skips output_item.added for this item. + // useChat.js dedups on mcpItemId so a second emit with the same id is harmless. + const fsToolCfgs = (tools || []).filter(t => t.type === 'file_search'); + const vsIdsForCfg = fsToolCfgs.flatMap(t => t.vector_store_ids || []); + const maxNumResults = fsToolCfgs[0]?.max_num_results || null; + controller.enqueue(encoder.encode(JSON.stringify({ + mcp: { + type: 'calling', + id: itemId, + server: 'file_search', + tool: 'file_search', + arguments: JSON.stringify({ vector_store_ids: vsIdsForCfg, max_num_results: maxNumResults }), + } + }) + '\n')); + } + else if (eventType === 'response.file_search_call.searching') { + controller.enqueue(encoder.encode(JSON.stringify({ + mcp: { type: 'tool_output', tool: 'file_search', server: 'file_search', output: 'Searching knowledge base...', status: 'searching' } + }) + '\n')); + } + else if (eventType === 'response.file_search_call.completed') { + log.debug('File search completed', { itemId, elapsed }); + } + + // ═══ NL2SQL EVENTS ═══ + else if (eventType === 'response.nl2sql_call.in_progress') { + const query = data.query || data.input_natural_language_query || ''; + controller.enqueue(encoder.encode(JSON.stringify({ + mcp: { type: 'calling', id: itemId, server: 'nl2sql', tool: 'nl2sql', arguments: query ? JSON.stringify({ query }) : '' } + }) + '\n')); + } + else if (eventType === 'response.nl2sql_call.completed') { + const sql = data.generated_sql || data.sql || ''; + const results = data.results || data.output || ''; + const output = sql ? `**Generated SQL:**\n\`\`\`sql\n${sql}\n\`\`\`${results ? `\n\n**Results:**\n${typeof results === 'string' ? results : JSON.stringify(results, null, 2)}` : ''}` : 'Query completed'; + controller.enqueue(encoder.encode(JSON.stringify({ + mcp: { type: 'tool_output', id: itemId, tool: 'nl2sql', server: 'nl2sql', output } + }) + '\n')); + } + + // ═══ REASONING EVENTS ═══ + else if (eventType === 'response.reasoning_summary_text.delta' && data.delta) { + controller.enqueue(encoder.encode(JSON.stringify({ reasoning: { type: 'delta', text: data.delta } }) + '\n')); + } + else if (eventType === 'response.reasoning_summary_text.done') { + controller.enqueue(encoder.encode(JSON.stringify({ reasoning: { type: 'done' } }) + '\n')); + } + else if (eventType === 'response.reasoning_summary_part.added') { + controller.enqueue(encoder.encode(JSON.stringify({ + reasoning: { type: 'part_start' } + }) + '\n')); + } + else if (eventType === 'response.reasoning_summary_part.done') { + controller.enqueue(encoder.encode(JSON.stringify({ + reasoning: { type: 'part_end' } + }) + '\n')); + } + + // ═══ CONTENT PART EVENTS ═══ + else if (eventType === 'response.content_part.added') { + log.debug('Content part added', { type: data.part?.type, elapsed }); + } + else if (eventType === 'response.content_part.done') { + if (data.part?.annotations?.length > 0) { + controller.enqueue(encoder.encode(JSON.stringify({ annotations: data.part.annotations }) + '\n')); + } + } + + // ═══ RESPONSE TERMINAL EVENTS (completed / incomplete / failed) ═══ + // All three carry the same `data.response` shape; differences are in + // `data.response.status`, `incomplete_details.reason`, and `error`. + // Treat all as terminal so the stream closes cleanly and the UI stops + // showing "premature close" for legitimate incomplete/failed responses. + else if (eventType === 'response.completed' || eventType === 'response.incomplete' || eventType === 'response.failed') { + responseCompleted = true; + const returnedConvId = data.response?.conversation; + if (returnedConvId) { + controller.enqueue(encoder.encode(JSON.stringify({ conversation_id: returnedConvId }) + '\n')); + } + + const outputs = data.response?.output || []; + const respStatus = data.response?.status; + const incompleteDetails = data.response?.incomplete_details; + const usage = data.response?.usage; + const error = data.response?.error; + + // Log EVERY output item in the completed response + outputs.forEach((o, i) => { + const summary = { index: i, type: o.type, status: o.status, role: o.role }; + if (o.name) summary.tool = o.name; + if (o.server_label) summary.server = o.server_label; + if (o.type === 'mcp_call') { + summary.hasOutput = !!o.output; + summary.outputLen = o.output?.length || 0; + summary.hasArguments = !!o.arguments; + summary.argsLen = o.arguments?.length || 0; + } + if (o.type === 'mcp_call' && o.status !== 'completed') { + log.error('MCP call in completed response has bad status', { ...summary, output: (o.output || '').substring(0, 1000) }); + } + log.info('Completed output item', summary); + }); + // Log all mcp_call items from response to see if create_oci_diagram is there + const mcpItems = outputs.filter(o => o.type === 'mcp_call'); + log.info('All MCP calls in completed response', { count: mcpItems.length, tools: mcpItems.map(m => ({ name: m.name, server: m.server_label, status: m.status, id: m.id })) }); + + // Log completion + log.info('Response completed', { + status: respStatus, + error: error || null, + outputTokens: usage?.output_tokens, + totalTokens: usage?.total_tokens, + outputItems: outputs.length, + elapsed: Date.now() - startTime, + opcRequestId, + }); + + if (respStatus !== 'completed') { + log.error('RESPONSE NOT COMPLETED', { status: respStatus, error, incompleteDetails, opcRequestId }); + } + if (incompleteDetails) log.warn('Response incomplete', { details: incompleteDetails }); + + // Emit tool_output for MCP calls that arrived in response.completed + // but never got an individual output_item.done event + for (const mc of outputs.filter(o => o.type === 'mcp_call' && o.output)) { + const alreadySent = toolCalls.some(tc => tc.tool === mc.name && tc.server === mc.server_label && tc.outputSent); + if (!alreadySent) { + log.info('Emitting late MCP tool_output from response.completed', { tool: mc.name, server: mc.server_label, outputSize: mc.output.length }); + controller.enqueue(encoder.encode(JSON.stringify({ + mcp: { type: 'tool_output', id: mc.id, tool: mc.name, server: mc.server_label, output: mc.output, outputSize: mc.output.length, truncated: false, arguments: mc.arguments } + }) + '\n')); + } + } + + // Fallback: emit tool_output for any file_search_call whose + // output_item.done branch never fired (rare, but keeps the chip in sync) + const fsToolCfgs = (tools || []).filter(t => t.type === 'file_search'); + const vsIds = fsToolCfgs.flatMap(t => t.vector_store_ids || []); + // Read max_num_results from tool config — default 20 (was hardcoded 5) + const maxNumResults = fsToolCfgs[0]?.max_num_results || 20; + for (const fs of outputs.filter(o => o.type === 'file_search_call')) { + if (fileSearchOutputsSent.has(fs.id)) continue; + const queries = fs.queries || []; + const summary = queries.length > 0 + ? `Searched: ${queries.map(q => `"${q}"`).join(', ')}` + : 'Search completed'; + fileSearchOutputsSent.add(fs.id); + controller.enqueue(encoder.encode(JSON.stringify({ + mcp: { + type: 'tool_output', + id: fs.id, + tool: 'file_search', + server: 'file_search', + output: summary, + arguments: JSON.stringify({ queries, vector_store_ids: vsIds, max_num_results: maxNumResults }), + } + }) + '\n')); + } + + // OCI returns file_search_call with results: null. Re-run the search ourselves + // against the vector_store(s) attached to this request so we can emit the + // matching documents as `file_citation` annotations the UI renders as chips. + // Each citation carries `file_search_call_id` so the chip can count chunks per call. + const fsCalls = outputs.filter(o => o.type === 'file_search_call' && o.queries?.length > 0); + if (fsCalls.length > 0 && vsIds.length > 0) { + const fsCitations = []; + const seen = new Set(); + await Promise.all( + fsCalls.flatMap(fs => fs.queries.flatMap(query => + vsIds.map(async (vsId) => { + try { + const sr = await ociRequest('POST', `/vector_stores/${vsId}/search`, { + body: { query, max_num_results: maxNumResults }, + }); + if (!sr.ok) return; + const sd = await sr.json(); + for (const r of (sd.data || [])) { + if (!r.file_id) continue; + const snippet = (r.content || []) + .map(c => (typeof c === 'string' ? c : c?.text || '')) + .join('') + .slice(0, 3000); + // Dedup at (file_search_call, query, chunk) level so the same chunk + // can appear under different file_search invocations. + const key = `${fs.id}::${query}::${r.file_id}::${snippet.slice(0, 80)}`; + if (seen.has(key)) continue; + seen.add(key); + fsCitations.push({ + type: 'file_citation', + file_id: r.file_id, + filename: r.filename, + score: r.score, + snippet, + vector_store_id: vsId, + query, + file_search_call_id: fs.id, + }); + } + } catch (e) { + log.warn('file_search source enrichment failed', { vsId, query, error: e.message }); + } + }) + )) + ); + if (fsCitations.length > 0) { + // Highest score first + fsCitations.sort((a, b) => (b.score || 0) - (a.score || 0)); + log.info('Emitting file_search source citations', { count: fsCitations.length }); + controller.enqueue(encoder.encode(JSON.stringify({ annotations: fsCitations }) + '\n')); + } + } + + // Enrich nl2sql with results + for (const ns of outputs.filter(o => o.type === 'nl2sql_call')) { + const sql = ns.generated_sql || ns.sql || ''; + const results = ns.results || ns.output || ''; + const output = sql ? `**Generated SQL:**\n\`\`\`sql\n${sql}\n\`\`\`${results ? `\n\n**Results:**\n${typeof results === 'string' ? results : JSON.stringify(results, null, 2)}` : ''}` : 'Query completed'; + controller.enqueue(encoder.encode(JSON.stringify({ + mcp: { type: 'tool_output', tool: 'nl2sql', server: 'nl2sql', output } + }) + '\n')); + } + + // Extract all annotations + const allAnnotations = outputs + .filter(item => Array.isArray(item.content)) + .flatMap(item => item.content) + .flatMap(part => part.annotations || []) + .filter(a => a.type === 'url_citation' || a.type === 'file_citation'); + + if (allAnnotations.length > 0) { + controller.enqueue(encoder.encode(JSON.stringify({ annotations: allAnnotations }) + '\n')); + } + + usageData = data.response?.usage || null; + + // Build completion trace + const completedElapsed = Date.now() - startTime; + trace.opcRequestId = opcRequestId; + trace.completion = { + status: respStatus, + error: error || null, + outputTokens: usage?.output_tokens, + totalTokens: usage?.total_tokens, + outputItems: outputs.length, + outputItemTypes: outputs.map(o => ({ type: o.type, tool: o.name, status: o.status })), + elapsed: completedElapsed, + incompleteDetails: incompleteDetails || null, + }; + traceEvent('response_completed', { status: respStatus, outputItems: outputs.length, elapsed: completedElapsed }); + + // Surface terminal-but-not-completed reason to the client so the + // UI can show a clear message instead of "premature close". + if (respStatus !== 'completed') { + const reason = incompleteDetails?.reason || error?.message || error?.code || respStatus || 'unknown'; + trace.error = `Response ended with status "${respStatus}": ${reason}`; + controller.enqueue(encoder.encode(JSON.stringify({ + response_incomplete: { status: respStatus, reason, error: error || null, incompleteDetails: incompleteDetails || null } + }) + '\n')); + } + // OCI silent failure: status="completed" but no input/output tokens and + // outputs only contain mcp_list_tools (no message/reasoning/tool_call). + // Verified reproducible upstream — surface as an error so the UI doesn't + // hang on a "successful" response that never actually ran the model. + else if ( + (usage?.output_tokens === 0 || usage?.total_tokens === 0) && + !outputs.some(o => o.type === 'message' || o.type === 'mcp_call' || o.type === 'function_call' || o.type === 'code_interpreter_call' || o.type === 'reasoning') + ) { + trace.error = `OCI returned status="completed" with 0 output tokens and no model output. ` + + `Only ${outputs.length} mcp_list_tools item(s) returned. This is an OCI silent-failure bug ` + + `(model never ran). opc-request-id: ${opcRequestId || 'unknown'}.`; + log.error('OCI silent failure: completed with no model output', { + outputItems: outputs.length, outputTypes: outputs.map(o => o.type), usage, opcRequestId, + }); + controller.enqueue(encoder.encode(JSON.stringify({ + response_incomplete: { + status: 'completed', + reason: 'oci_silent_failure', + error: null, + incompleteDetails: { reason: 'oci_silent_failure', outputItems: outputs.length, outputTypes: outputs.map(o => o.type) }, + } + }) + '\n')); + } + + // Cache for end-of-stream finalization. + // Do NOT declare tools orphaned or emit done:true yet — + // OCI sometimes emits tool results (response.output_item.done with mcp_call output) + // AFTER response.completed when the tool was slow. Wait until the stream actually closes. + completedResponseData = { outputs, respStatus, data, completedElapsed }; + } + + // ═══ ANYTHING ELSE — log it, never silently drop ═══ + else { + log.warn('Unknown SSE event', { type: eventType, itemType, elapsed, data: JSON.stringify(data).substring(0, 500) }); + } + + } catch (e) { + log.warn('Unparseable SSE line', { line: line.substring(0, 200), error: e.message }); + } + } + } + } finally { + // Log leftover buffer — could contain error info OCI sent at the end + if (buffer.trim()) { + log.warn('Leftover buffer after stream ended', { buffer: buffer.substring(0, 2000) }); + // Try to parse it + try { + const leftover = buffer.trim().startsWith('data: ') ? JSON.parse(buffer.trim().slice(6)) : null; + if (leftover) log.warn('Leftover parsed data', { type: leftover.type, data: JSON.stringify(leftover).substring(0, 1000) }); + } catch (_) {} + } + + const elapsed = Date.now() - startTime; + log.info('Stream ended', { elapsed, toolCalls: toolCalls.length, textLength: fullOutputText.length, responseCompleted, eventCount, lastEventType, stalled, opcRequestId }); + + // Finalize completed response: check orphaned tools and emit done:true. + // Deferred from response.completed because OCI sometimes sends tool results AFTER it. + if (responseCompleted && completedResponseData) { + const { outputs, completedElapsed, data: completedData } = completedResponseData; + const completedToolIds = new Set(outputs.filter(o => o.type === 'mcp_call').map(o => o.id)); + // Also consider tools whose output arrived after response.completed via output_item.done + const postCompletionToolIds = new Set(toolCalls.filter(tc => tc.outputSent).map(tc => tc.id).filter(Boolean)); + for (const [tid, tinfo] of Object.entries(trace.tools)) { + if (tinfo.status === 'calling' && !completedToolIds.has(tid) && !postCompletionToolIds.has(tid)) { + tinfo.status = 'orphaned'; + traceEvent('tool_orphaned', { tool: tinfo.tool, server: tinfo.server, id: tid, detail: 'OCI closed stream without this tool result' }); + trace.error = trace.error || `OCI completed response while "${tinfo.tool}" (${tinfo.server}) was still executing. The tool was called at ${tinfo.startMs}ms but OCI closed the stream at ${completedElapsed}ms without including its result. This is an OCI Responses API issue.`; + } + } + try { + controller.enqueue(encoder.encode(JSON.stringify({ + done: true, response_id: completedData.response?.id || null, opc_request_id: opcRequestId || null, trace + }) + '\n')); + } catch (_) { /* controller may already be closing */ } + } + + // Detect premature close: OCI dropped connection without response.completed + if (!responseCompleted && !stalled) { + log.error('PREMATURE STREAM CLOSE — OCI never sent response.completed', { + elapsed, eventCount, lastEventType, toolCalls, textLength: fullOutputText.length, opcRequestId, + buffer: buffer.substring(0, 500), + }); + trace.opcRequestId = opcRequestId; + trace.error = `OCI closed connection after ${Math.round(elapsed / 1000)}s without response.completed. ` + + `Received ${eventCount} events, last was "${lastEventType || 'none'}". ` + + `${toolCalls.length > 0 ? `Active tools: ${toolCalls.map(t => t.tool).join(', ')}. ` : ''}` + + `This is an OCI Responses API issue — the upstream closed the SSE stream prematurely.`; + traceEvent('premature_close', { eventCount, lastEventType }); + try { + controller.enqueue(encoder.encode(JSON.stringify({ + error: trace.error, + done: true, + trace, + }) + '\n')); + } catch (_) { /* controller may already be closing */ } + } + + reader.releaseLock(); + controller.close(); + + // Finalize LangFuse trace (non-blocking) + if (langfuseGeneration) { + try { + const duration = Date.now() - startTime; + langfuseGeneration.end({ + output: fullOutputText.slice(0, 10000), + usage: usageData ? { + input: usageData.input_tokens || usageData.prompt_tokens, + output: usageData.output_tokens || usageData.completion_tokens, + total: usageData.total_tokens, + } : undefined, + metadata: { duration, toolCalls, opcRequestId }, + }); + langfuseTrace.update({ output: fullOutputText.slice(0, 500) }); + langfuse.flushAsync().catch(() => {}); + } catch (e) { + log.warn('LangFuse finalize error', { error: e.message }); + } + } + } + } + }); + + return new Response(stream, { + headers: { + 'Content-Type': 'text/event-stream', + 'Cache-Control': 'no-cache', + 'Connection': 'keep-alive', + }, + }); + + } catch (error) { + log.error('Unhandled error', { error: error.message, stack: error.stack }); + // Log error to LangFuse if available + if (langfuseGeneration) { + try { + langfuseGeneration.end({ level: 'ERROR', statusMessage: error.message }); + langfuse?.flushAsync().catch(() => {}); + } catch (_) {} + } + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/semantic-stores/route.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/semantic-stores/route.js new file mode 100644 index 000000000..ac445cde6 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/semantic-stores/route.js @@ -0,0 +1,16 @@ +import { NextResponse } from 'next/server'; +import { ociRequest, toNextResponse } from '../../lib/oci-proxy'; + +// GET /api/semantic-stores — list semantic stores (structured vector stores) +export async function GET() { + try { + const compartmentId = process.env.OCI_COMPARTMENT_ID; + const res = await ociRequest('GET', `/semanticStores?compartmentId=${compartmentId}`, { + host: 'controlPlane', + basePath: '/20231130', + }); + return toNextResponse(res); + } catch (error) { + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/vector-stores/route.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/vector-stores/route.js new file mode 100644 index 000000000..734d740d6 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/api/vector-stores/route.js @@ -0,0 +1,121 @@ +import { NextResponse } from 'next/server'; +import { ociRequest, toNextResponse } from '../../lib/oci-proxy'; + +// GET /api/vector-stores → list all vector stores +// GET /api/vector-stores?id=X → get one vector store +// GET /api/vector-stores?id=X&files=1 → list files in vector store +export async function GET(request) { + try { + const { searchParams } = new URL(request.url); + const id = searchParams.get('id'); + const files = searchParams.get('files'); + + if (id && files) { + return toNextResponse(await ociRequest('GET', `/vector_stores/${id}/files`)); + } + if (id) { + return toNextResponse(await ociRequest('GET', `/vector_stores/${id}`, { host: 'controlPlane' })); + } + return toNextResponse(await ociRequest('GET', '/vector_stores', { host: 'controlPlane' })); + } catch (error) { + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} + +// POST /api/vector-stores → create vector store +// POST /api/vector-stores?id=X&action=attach-file → attach file to vector store +// POST /api/vector-stores?id=X&action=search → search vector store +export async function POST(request) { + try { + const { searchParams } = new URL(request.url); + const id = searchParams.get('id'); + const action = searchParams.get('action'); + + if (id && action === 'attach-file') { + const { file_id, attributes, chunking_strategy } = await request.json(); + if (!file_id) return NextResponse.json({ error: 'file_id is required' }, { status: 400 }); + const body = { file_id }; + if (attributes) body.attributes = attributes; + if (chunking_strategy) body.chunking_strategy = chunking_strategy; + return toNextResponse(await ociRequest('POST', `/vector_stores/${id}/files`, { body })); + } + + if (id && action === 'attach-batch') { + const { file_ids, attributes, chunking_strategy } = await request.json(); + if (!Array.isArray(file_ids) || file_ids.length === 0) { + return NextResponse.json({ error: 'file_ids array is required' }, { status: 400 }); + } + const body = { file_ids }; + if (attributes) body.attributes = attributes; + if (chunking_strategy) body.chunking_strategy = chunking_strategy; + return toNextResponse(await ociRequest('POST', `/vector_stores/${id}/file_batches`, { body })); + } + + if (id && action === 'search') { + const { query, max_num_results, filters, ranking_options } = await request.json(); + if (!query) return NextResponse.json({ error: 'query is required' }, { status: 400 }); + const body = { query }; + if (max_num_results) body.max_num_results = max_num_results; + if (filters) body.filters = filters; + if (ranking_options) body.ranking_options = ranking_options; + return toNextResponse(await ociRequest('POST', `/vector_stores/${id}/search`, { body })); + } + + // Create vector store (control plane) + const { name, description, file_ids, chunking_strategy, expires_after, metadata } = await request.json(); + if (!name) return NextResponse.json({ error: 'name is required' }, { status: 400 }); + const body = { name }; + if (description) body.description = description; + if (file_ids?.length > 0) body.file_ids = file_ids; + if (chunking_strategy) body.chunking_strategy = chunking_strategy; + if (expires_after) body.expires_after = expires_after; + if (metadata && Object.keys(metadata).length > 0) body.metadata = metadata; + return toNextResponse(await ociRequest('POST', '/vector_stores', { host: 'controlPlane', body })); + } catch (error) { + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} + +// PUT /api/vector-stores?id=X → update vector store (name, metadata, expires_after) +// PUT /api/vector-stores?id=X&file_id=F → update file attributes +// Note: OCI uses POST (not PUT) for updates on the OpenAI-compatible API +export async function PUT(request) { + try { + const { searchParams } = new URL(request.url); + const id = searchParams.get('id'); + const fileId = searchParams.get('file_id'); + if (!id) return NextResponse.json({ error: 'id is required' }, { status: 400 }); + + if (fileId) { + const { attributes } = await request.json(); + return toNextResponse(await ociRequest('POST', `/vector_stores/${id}/files/${fileId}`, { body: { attributes } })); + } + + const { name, metadata, expires_after } = await request.json(); + const body = {}; + if (name !== undefined) body.name = name; + if (metadata !== undefined) body.metadata = metadata; + if (expires_after !== undefined) body.expires_after = expires_after; + return toNextResponse(await ociRequest('POST', `/vector_stores/${id}`, { host: 'controlPlane', body })); + } catch (error) { + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} + +// DELETE /api/vector-stores?id=X → delete vector store +// DELETE /api/vector-stores?id=X&file_id=F → remove file from vector store +export async function DELETE(request) { + try { + const { searchParams } = new URL(request.url); + const id = searchParams.get('id'); + const fileId = searchParams.get('file_id'); + if (!id) return NextResponse.json({ error: 'id is required' }, { status: 400 }); + + if (fileId) { + return toNextResponse(await ociRequest('DELETE', `/vector_stores/${id}/files/${fileId}`)); + } + return toNextResponse(await ociRequest('DELETE', `/vector_stores/${id}`, { host: 'controlPlane' })); + } catch (error) { + return NextResponse.json({ error: error.message }, { status: 500 }); + } +} diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/c/[id]/page.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/c/[id]/page.js new file mode 100644 index 000000000..ebbdfccbd --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/c/[id]/page.js @@ -0,0 +1,19 @@ +"use client"; + +import { useParams } from "next/navigation"; +import { useEffect, useState } from "react"; +import Home from "../../page"; + +export default function ConversationPage() { + const params = useParams(); + const [conversationId, setConversationId] = useState(null); + + useEffect(() => { + if (params?.id) { + setConversationId(params.id); + } + }, [params?.id]); + + // Pass the conversation ID to the Home component + return ; +} diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/agent/AgentStateRenderer.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/agent/AgentStateRenderer.js new file mode 100644 index 000000000..1d83c6aff --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/agent/AgentStateRenderer.js @@ -0,0 +1,275 @@ +"use client"; + +import { Box, Chip, CircularProgress, Stack, Tooltip, Typography, Collapse, IconButton, Paper } from "@mui/material"; +import { + Error as ErrorIcon, + CheckCircle as CheckCircleIcon, + ExpandMore as ExpandMoreIcon, + ExpandLess as ExpandLessIcon, + Build as BuildIcon +} from "@mui/icons-material"; +import ReactMarkdown from 'react-markdown'; +import remarkGfm from 'remark-gfm'; +import TypingEffect from "./ui/TypingEffect"; +import { useState } from "react"; +import JsonView from '@uiw/react-json-view'; + +// Common chip styles +const chipStyles = { + height: 'auto', + fontSize: '0.85em !important', + padding: '0.25rem 0.75rem', + borderRadius: '100px', + width: 'fit-content', + animation: 'slideInLeft 0.4s ease-out', + cursor: 'pointer', + '@keyframes slideInLeft': { + '0%': { + transform: 'translateX(-20px)', + opacity: 0 + }, + '100%': { + transform: 'translateX(0)', + opacity: 1 + } + }, + '& .MuiChip-icon': { + fontSize: '0.85em !important' + }, + '& .MuiChip-label': { + fontSize: '0.85em !important', + display: 'flex', + alignItems: 'center', + gap: 0.5 + } +}; + +// Common text styles +const textStyles = { + fontSize: "inherit", + fontWeight: "inherit", + opacity: 0.7 +}; + +// Expandable chip component +const ExpandableChip = ({ icon, label, color, variant, content, sx = {} }) => { + const [expanded, setExpanded] = useState(false); + + return ( + + + {label} + {content && ( + expanded ? : + )} + + } + color={color} + variant={variant} + onClick={() => content && setExpanded(!expanded)} + sx={{ ...chipStyles, ...sx }} + /> + {content && ( + + + {typeof content === 'string' ? ( + + {content} + + ) : ( + + + + )} + + + )} + + ); +}; + +const AgentStateRenderer = ({ states }) => { + // Remove consecutive duplicate states + const dedupedStates = states.filter((state, index) => { + if (index === 0) return true; + const prev = states[index - 1]; + + // Compare states for equality (excluding text type which should accumulate) + if (state.type === 'text') return true; + + return !( + state.trace === prev.trace && + state.error === prev.error && + state.done === prev.done && + state.tool_use === prev.tool_use && + state.message === prev.message && + state.type === prev.type + ); + }); + + // Simple helper to check if trace is completed (has something after it) + const isTraceCompleted = (index) => { + return index < dedupedStates.length - 1 && + dedupedStates.slice(index + 1).some(s => s.done || s.type === 'text' || s.type === 'error' || s.trace); + }; + + // Render different types of components + const renderErrorChip = (content, key) => ( + + } + label="Error" + color="error" + variant="outlined" + content={content} + /> + + ); + + const renderTraceChip = (trace, message, isCompleted, key) => { + const isConnecting = trace === 'connecting'; + const customStyles = isConnecting ? { + animation: 'slideInLeft 0.4s ease-out 0.5s both', + } : {}; + + const label = trace.charAt(0).toUpperCase() + trace.slice(1); + + return ( + + : } + label={label} + color={isCompleted ? "success" : "default"} + variant="outlined" + content={message} + sx={customStyles} + /> + + ); + }; + + const renderToolUse = (toolData, key) => { + const toolName = toolData.tool || 'Unknown Tool'; + const status = toolData.status || 'executing'; + const isCompleted = status === 'completed'; + + const label = isCompleted + ? `Tool response: ${toolName}` + : `Calling tool: ${toolName}`; + + return ( + + : } + label={label} + color={isCompleted ? "success" : "primary"} + variant="outlined" + content={toolData} + /> + + ); + }; + + const renderText = (content, key) => ( + + {content} + + ); + + const renderMarkdown = (text, key) => ( + + + {(text) => ( + + {text} + + )} + + + ); + + // Process states and build elements array + let currentTextBlock = ""; + const elements = []; + + const flushTextBlock = () => { + if (currentTextBlock) { + elements.push(renderMarkdown(currentTextBlock, `text-${elements.length}`)); + currentTextBlock = ""; + } + }; + + dedupedStates.forEach((state, index) => { + // Accumulate text chunks + if (state.type === 'text') { + currentTextBlock += state.content; + return; + } + + // Flush any accumulated text before rendering other elements + flushTextBlock(); + + // Render based on state type + if (state.type === 'error') { + elements.push(renderErrorChip(state.content, `error-${index}`)); + } else if (state.error) { + elements.push(renderErrorChip(state.error, `stream-error-${index}`)); + } else if (state.done) { + // Skip done states - they're used only for clock status + } else if (state.trace) { + elements.push(renderTraceChip(state.trace, state.message, isTraceCompleted(index), `trace-${index}`)); + } else if (state.tool_use) { + elements.push(renderToolUse(state.tool_use, `tool-${index}`)); + } else if (state.message) { + elements.push(renderText(state.message, `message-${index}`)); + } else if (Object.keys(state).length > 0) { + elements.push(renderText(JSON.stringify(state), `unknown-${index}`)); + } + }); + + // Flush any remaining text + flushTextBlock(); + + return {elements}; +}; + + +export default AgentStateRenderer; \ No newline at end of file diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/agent/Sources.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/agent/Sources.js new file mode 100644 index 000000000..b3c8f438e --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/agent/Sources.js @@ -0,0 +1,394 @@ +import { useState } from "react"; +import { Box, Typography, Dialog, DialogTitle, DialogContent, IconButton, Chip, Accordion, AccordionSummary, AccordionDetails } from "@mui/material"; +import { motion } from "framer-motion"; +import { ExternalLink, FileText, X, ChevronDown, Search } from "lucide-react"; + +export default function Sources({ sources, delay = 0 }) { + const [openDialog, setOpenDialog] = useState(false); + const [expandedChunk, setExpandedChunk] = useState(null); + + if (!sources || sources.length === 0) return null; + + // Split file_citation (chunks from RAG) from url_citation (web search) + const fileChunks = sources.filter(s => s.type === 'file_citation'); + const urlSources = sources.filter(s => s.type !== 'file_citation'); + + // Dedup URL sources by URL + const seenUrls = new Set(); + const uniqueUrls = urlSources.filter(s => { + const key = s.url; + if (!key || seenUrls.has(key)) return false; + seenUrls.add(key); + return true; + }); + + // Sort chunks by score desc; keep query info on each chunk for the badge + const sortedChunks = [...fileChunks].sort((a, b) => (b.score || 0) - (a.score || 0)); + + // Count distinct queries to decide whether to show query-source labels + const distinctQueries = new Set(fileChunks.map(c => c.query).filter(Boolean)); + const totalQueries = distinctQueries.size; + const totalChunks = fileChunks.length; + + const fileChipLabel = (() => { + if (totalChunks === 0) return null; + if (totalQueries <= 1) return `Sources · ${totalChunks} chunk${totalChunks === 1 ? '' : 's'}`; + return `Sources · ${totalQueries} searches · ${totalChunks} chunks`; + })(); + + if (uniqueUrls.length === 0 && fileChipLabel === null) return null; + + const fileChipSx = { + display: "inline-flex", + alignItems: "center", + gap: 0.5, + px: 1.25, + py: 0.5, + borderRadius: "16px", + backgroundColor: "rgba(139,92,246,0.06)", + border: "1px solid rgba(139,92,246,0.15)", + color: "#6D28D9", + fontSize: "0.8rem", + lineHeight: 1.3, + transition: "all 0.15s ease", + cursor: "pointer", + "&:hover": { + backgroundColor: "rgba(139,92,246,0.1)", + borderColor: "rgba(139,92,246,0.25)", + }, + }; + + const urlChipSx = { + display: "inline-flex", + alignItems: "center", + gap: 0.5, + px: 1.25, + py: 0.5, + borderRadius: "16px", + backgroundColor: "rgba(0,0,0,0.04)", + border: "1px solid rgba(0,0,0,0.08)", + textDecoration: "none", + color: "#444", + fontSize: "0.8rem", + lineHeight: 1.3, + transition: "all 0.15s ease", + maxWidth: 280, + cursor: "pointer", + "&:hover": { backgroundColor: "rgba(0,0,0,0.08)", borderColor: "rgba(0,0,0,0.15)" }, + }; + + const scoreColor = (score) => { + if (typeof score !== 'number') return { bg: "rgba(0,0,0,0.05)", fg: "rgba(0,0,0,0.5)" }; + if (score > 0.5) return { bg: "rgba(34,197,94,0.1)", fg: "#16a34a" }; + if (score > 0.25) return { bg: "rgba(234,179,8,0.1)", fg: "#ca8a04" }; + return { bg: "rgba(0,0,0,0.05)", fg: "rgba(0,0,0,0.5)" }; + }; + + return ( + <> + + + {/* URL chips (web search) */} + {uniqueUrls.map((s, i) => { + const cleanUrl = s.url?.replace(/[?&]utm_source=openai/, '') || '#'; + const label = s.title || s.name || (() => { + try { return new URL(s.url).hostname; } catch { return s.url; } + })(); + return ( + + + + {label} + + + ); + })} + + {/* File summary chip */} + {fileChipLabel && ( + setOpenDialog(true)} sx={fileChipSx}> + + + {fileChipLabel} + + + )} + + + + {/* Sources detail modal — one accordion per chunk */} + setOpenDialog(false)} + maxWidth="md" + fullWidth + PaperProps={{ + sx: { + borderRadius: 2, + height: "min(85vh, 760px)", + display: "flex", + flexDirection: "column", + overflow: "hidden", + backgroundColor: "#fbfaff", + boxShadow: "0 24px 60px -20px rgba(76, 29, 149, 0.25), 0 8px 24px -8px rgba(0,0,0,0.08)", + }, + }} + > + {/* Header — fixed; never shrinks under scroll content */} + + + + + + + Sources used + + + {fileChipLabel} + + + setOpenDialog(false)} + sx={{ + p: 0.5, + color: "rgba(0,0,0,0.5)", + "&:hover": { backgroundColor: "rgba(0,0,0,0.05)", color: "#1a1a1a" }, + }} + > + + + + + {/* Body — flex:1 + minHeight:0 + overflowY:auto is what makes scroll work inside a flex column */} + + {sortedChunks.map((c, i) => { + const href = c.file_id + ? `/api/files/${c.file_id}/content${c.vector_store_id ? `?vsId=${c.vector_store_id}` : ''}` + : null; + const scorePct = typeof c.score === 'number' ? `${(c.score * 100).toFixed(0)}%` : null; + const sc = scoreColor(c.score); + const isExpanded = expandedChunk === i; + return ( + setExpandedChunk(exp ? i : null)} + disableGutters + elevation={0} + square={false} + sx={{ + border: "1px solid rgba(109,40,217,0.08)", + borderRadius: "10px !important", + backgroundColor: "rgba(255,255,255,0.6)", + transition: "all 0.18s ease", + "&:before": { display: "none" }, + "&:hover": { + borderColor: "rgba(109,40,217,0.18)", + backgroundColor: "rgba(255,255,255,0.95)", + }, + "&.Mui-expanded": { + margin: 0, + backgroundColor: "#ffffff", + borderColor: "rgba(109,40,217,0.25)", + boxShadow: "0 4px 16px -6px rgba(109,40,217,0.18)", + }, + "& .MuiCollapse-root": { borderRadius: "0 0 10px 10px" }, + }} + > + } + sx={{ + minHeight: 0, + px: 1.5, + py: 0.5, + borderRadius: "10px", + "& .MuiAccordionSummary-content": { my: 0.75, alignItems: "center", gap: 1.25 }, + "&.Mui-expanded": { + minHeight: 0, + borderBottom: "1px solid rgba(109,40,217,0.08)", + borderRadius: "10px 10px 0 0", + }, + }} + > + + + {c.filename || c.file_id || 'Unknown'} + + {scorePct && ( + + )} + {href && ( + e.stopPropagation()} + onMouseDown={(e) => e.stopPropagation()} + onFocus={(e) => e.stopPropagation()} + title="Open document in new tab" + sx={{ + p: 0.4, + ml: 0.25, + color: "rgba(109,40,217,0.55)", + flexShrink: 0, + borderRadius: "6px", + "&:hover": { + backgroundColor: "rgba(109,40,217,0.1)", + color: "#6D28D9", + }, + }} + > + + + )} + + + {c.query && totalQueries > 1 && ( + + + + {c.query} + + + )} + {c.snippet ? ( + + + {c.snippet.length >= 3000 ? `${c.snippet.trim()}…` : c.snippet.trim()} + + + ) : ( + + No snippet available + + )} + + + ); + })} + + + + ); +} diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/charts/CostBenefitChart.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/charts/CostBenefitChart.js new file mode 100644 index 000000000..9d7d5d735 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/charts/CostBenefitChart.js @@ -0,0 +1,362 @@ +"use client"; + +import { Box, Typography } from "@mui/material"; +import { motion } from "framer-motion"; +import { useEffect, useRef } from "react"; + +export default function CostBenefitChart({ data, title = "Cost-Benefit Analysis" }) { + const svgRef = useRef(null); + + useEffect(() => { + if (!data || !svgRef.current) return; + + const svg = svgRef.current; + const width = 500; + const height = 350; + const margin = { top: 40, right: 40, bottom: 80, left: 80 }; + const plotWidth = width - margin.left - margin.right; + const plotHeight = height - margin.top - margin.bottom; + + // Clear previous content + svg.innerHTML = ''; + + // Create main group + const g = document.createElementNS("http://www.w3.org/2000/svg", "g"); + g.setAttribute("transform", `translate(${margin.left}, ${margin.top})`); + svg.appendChild(g); + + // Calculate bar dimensions + const barWidth = plotWidth / 4; + const barSpacing = barWidth / 4; + + // Data for the chart + const chartData = [ + { label: "Initial Cost", hd2024: 2850, hd2025: 4150, color2024: "#4caf50", color2025: "#f44336" }, + { label: "8h Operation Cost\n(Annual)", hd2024: 1200, hd2025: 800, color2024: "#4caf50", color2025: "#ff9800" }, + { label: "Maintenance Cost\n(Annual)", hd2024: 600, hd2025: 400, color2024: "#81c784", color2025: "#ffb74d" }, + { label: "Total 3-Year Cost", hd2024: 8250, hd2025: 7750, color2024: "#2e7d32", color2025: "#e64a19" } + ]; + + // Find max value for scaling + const maxValue = Math.max(...chartData.flatMap(d => [d.hd2024, d.hd2025])); + const scale = plotHeight / maxValue; + + // Draw grid lines + for (let i = 0; i <= 5; i++) { + const y = (i / 5) * plotHeight; + const gridLine = document.createElementNS("http://www.w3.org/2000/svg", "line"); + gridLine.setAttribute("x1", 0); + gridLine.setAttribute("y1", plotHeight - y); + gridLine.setAttribute("x2", plotWidth); + gridLine.setAttribute("y2", plotHeight - y); + gridLine.setAttribute("stroke", "#f0f0f0"); + gridLine.setAttribute("stroke-width", "1"); + g.appendChild(gridLine); + + // Add value labels + const valueLabel = document.createElementNS("http://www.w3.org/2000/svg", "text"); + valueLabel.setAttribute("x", -10); + valueLabel.setAttribute("y", plotHeight - y + 4); + valueLabel.setAttribute("text-anchor", "end"); + valueLabel.setAttribute("font-size", "10"); + valueLabel.setAttribute("font-family", "var(--font-exo2), sans-serif"); + valueLabel.setAttribute("fill", "#666"); + valueLabel.textContent = `$${Math.round((maxValue / 5) * i / 1000)}k`; + g.appendChild(valueLabel); + } + + // Draw bars for each category + chartData.forEach((category, categoryIndex) => { + const categoryX = categoryIndex * (barWidth + barSpacing); + + // HD-2024 bar + const bar2024Height = category.hd2024 * scale; + const bar2024 = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + bar2024.setAttribute("x", categoryX); + bar2024.setAttribute("y", plotHeight); + bar2024.setAttribute("width", barWidth * 0.4); + bar2024.setAttribute("height", 0); + bar2024.setAttribute("fill", category.color2024); + bar2024.setAttribute("rx", "2"); + bar2024.style.animation = `growBar 1s ease-out ${categoryIndex * 0.2}s forwards`; + g.appendChild(bar2024); + + // HD-2025 bar + const bar2025Height = category.hd2025 * scale; + const bar2025 = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + bar2025.setAttribute("x", categoryX + barWidth * 0.45); + bar2025.setAttribute("y", plotHeight); + bar2025.setAttribute("width", barWidth * 0.4); + bar2025.setAttribute("height", 0); + bar2025.setAttribute("fill", category.color2025); + bar2025.setAttribute("rx", "2"); + bar2025.style.animation = `growBar 1s ease-out ${categoryIndex * 0.2 + 0.1}s forwards`; + g.appendChild(bar2025); + + // Value labels on bars + const value2024 = document.createElementNS("http://www.w3.org/2000/svg", "text"); + value2024.setAttribute("x", categoryX + barWidth * 0.2); + value2024.setAttribute("y", plotHeight - bar2024Height - 5); + value2024.setAttribute("text-anchor", "middle"); + value2024.setAttribute("font-size", "10"); + value2024.setAttribute("font-family", "var(--font-exo2), sans-serif"); + value2024.setAttribute("fill", "#333"); + value2024.setAttribute("font-weight", "bold"); + value2024.textContent = `$${category.hd2024}`; + value2024.style.opacity = "0"; + value2024.style.animation = `fadeIn 0.5s ease-out ${categoryIndex * 0.2 + 0.8}s forwards`; + g.appendChild(value2024); + + const value2025 = document.createElementNS("http://www.w3.org/2000/svg", "text"); + value2025.setAttribute("x", categoryX + barWidth * 0.65); + value2025.setAttribute("y", plotHeight - bar2025Height - 5); + value2025.setAttribute("text-anchor", "middle"); + value2025.setAttribute("font-size", "10"); + value2025.setAttribute("font-family", "var(--font-exo2), sans-serif"); + value2025.setAttribute("fill", "#333"); + value2025.setAttribute("font-weight", "bold"); + value2025.textContent = `$${category.hd2025}`; + value2025.style.opacity = "0"; + value2025.style.animation = `fadeIn 0.5s ease-out ${categoryIndex * 0.2 + 0.9}s forwards`; + g.appendChild(value2025); + + // Category labels + const categoryLabel = document.createElementNS("http://www.w3.org/2000/svg", "text"); + categoryLabel.setAttribute("x", categoryX + barWidth * 0.425); + categoryLabel.setAttribute("y", plotHeight + 25); + categoryLabel.setAttribute("text-anchor", "middle"); + categoryLabel.setAttribute("font-size", "11"); + categoryLabel.setAttribute("font-family", "var(--font-exo2), sans-serif"); + categoryLabel.setAttribute("fill", "#666"); + categoryLabel.setAttribute("font-weight", "500"); + + // Handle multi-line labels + const lines = category.label.split('\n'); + if (lines.length > 1) { + lines.forEach((line, lineIndex) => { + const tspan = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + tspan.setAttribute("x", categoryX + barWidth * 0.425); + tspan.setAttribute("dy", lineIndex === 0 ? 0 : 12); + tspan.textContent = line; + categoryLabel.appendChild(tspan); + }); + } else { + categoryLabel.textContent = category.label; + } + + g.appendChild(categoryLabel); + + // Add animation keyframes to the bar elements + bar2024.style.setProperty('--target-height', `${bar2024Height}px`); + bar2024.style.setProperty('--target-y', `${plotHeight - bar2024Height}px`); + + bar2025.style.setProperty('--target-height', `${bar2025Height}px`); + bar2025.style.setProperty('--target-y', `${plotHeight - bar2025Height}px`); + }); + + // Add Winner indicator for Initial Cost + const winnerBox = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + winnerBox.setAttribute("x", -5); + winnerBox.setAttribute("y", plotHeight - chartData[0].hd2024 * scale - 25); + winnerBox.setAttribute("width", barWidth * 0.4 + 10); + winnerBox.setAttribute("height", 20); + winnerBox.setAttribute("fill", "#4caf50"); + winnerBox.setAttribute("fill-opacity", "0.1"); + winnerBox.setAttribute("stroke", "#4caf50"); + winnerBox.setAttribute("stroke-width", "2"); + winnerBox.setAttribute("rx", "3"); + winnerBox.style.opacity = "0"; + winnerBox.style.animation = "fadeIn 0.5s ease-out 2s forwards"; + g.appendChild(winnerBox); + + const winnerText = document.createElementNS("http://www.w3.org/2000/svg", "text"); + winnerText.setAttribute("x", barWidth * 0.2); + winnerText.setAttribute("y", plotHeight - chartData[0].hd2024 * scale - 12); + winnerText.setAttribute("text-anchor", "middle"); + winnerText.setAttribute("font-size", "10"); + winnerText.setAttribute("font-family", "var(--font-exo2), sans-serif"); + winnerText.setAttribute("fill", "#4caf50"); + winnerText.setAttribute("font-weight", "bold"); + winnerText.textContent = "WINNER"; + winnerText.style.opacity = "0"; + winnerText.style.animation = "fadeIn 0.5s ease-out 2.1s forwards"; + g.appendChild(winnerText); + + // Add axis labels + const yLabel = document.createElementNS("http://www.w3.org/2000/svg", "text"); + yLabel.setAttribute("x", -50); + yLabel.setAttribute("y", plotHeight / 2); + yLabel.setAttribute("text-anchor", "middle"); + yLabel.setAttribute("transform", `rotate(-90, -50, ${plotHeight / 2})`); + yLabel.setAttribute("font-size", "12"); + yLabel.setAttribute("font-family", "var(--font-exo2), sans-serif"); + yLabel.setAttribute("fill", "#666"); + yLabel.textContent = "Cost (USD)"; + g.appendChild(yLabel); + + // Add conclusion box + const conclusionBox = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + conclusionBox.setAttribute("x", plotWidth - 150); + conclusionBox.setAttribute("y", 10); + conclusionBox.setAttribute("width", 140); + conclusionBox.setAttribute("height", 80); + conclusionBox.setAttribute("fill", "#e8f5e8"); + conclusionBox.setAttribute("stroke", "#4caf50"); + conclusionBox.setAttribute("stroke-width", "2"); + conclusionBox.setAttribute("rx", "5"); + conclusionBox.style.opacity = "0"; + conclusionBox.style.animation = "fadeIn 0.5s ease-out 2.5s forwards"; + g.appendChild(conclusionBox); + + const conclusionTitle = document.createElementNS("http://www.w3.org/2000/svg", "text"); + conclusionTitle.setAttribute("x", plotWidth - 80); + conclusionTitle.setAttribute("y", 28); + conclusionTitle.setAttribute("text-anchor", "middle"); + conclusionTitle.setAttribute("font-size", "11"); + conclusionTitle.setAttribute("font-family", "var(--font-exo2), sans-serif"); + conclusionTitle.setAttribute("fill", "#2e7d32"); + conclusionTitle.setAttribute("font-weight", "bold"); + conclusionTitle.textContent = "8-Hour Shifts"; + conclusionTitle.style.opacity = "0"; + conclusionTitle.style.animation = "fadeIn 0.5s ease-out 2.6s forwards"; + g.appendChild(conclusionTitle); + + const conclusionText1 = document.createElementNS("http://www.w3.org/2000/svg", "text"); + conclusionText1.setAttribute("x", plotWidth - 80); + conclusionText1.setAttribute("y", 45); + conclusionText1.setAttribute("text-anchor", "middle"); + conclusionText1.setAttribute("font-size", "9"); + conclusionText1.setAttribute("font-family", "var(--font-exo2), sans-serif"); + conclusionText1.setAttribute("fill", "#2e7d32"); + conclusionText1.textContent = "HD-2024 saves"; + conclusionText1.style.opacity = "0"; + conclusionText1.style.animation = "fadeIn 0.5s ease-out 2.7s forwards"; + g.appendChild(conclusionText1); + + const conclusionText2 = document.createElementNS("http://www.w3.org/2000/svg", "text"); + conclusionText2.setAttribute("x", plotWidth - 80); + conclusionText2.setAttribute("y", 58); + conclusionText2.setAttribute("text-anchor", "middle"); + conclusionText2.setAttribute("font-size", "9"); + conclusionText2.setAttribute("font-family", "var(--font-exo2), sans-serif"); + conclusionText2.setAttribute("fill", "#2e7d32"); + conclusionText2.setAttribute("font-weight", "bold"); + conclusionText2.textContent = "$1,300 initially"; + conclusionText2.style.opacity = "0"; + conclusionText2.style.animation = "fadeIn 0.5s ease-out 2.8s forwards"; + g.appendChild(conclusionText2); + + const conclusionText3 = document.createElementNS("http://www.w3.org/2000/svg", "text"); + conclusionText3.setAttribute("x", plotWidth - 80); + conclusionText3.setAttribute("y", 75); + conclusionText3.setAttribute("text-anchor", "middle"); + conclusionText3.setAttribute("font-size", "9"); + conclusionText3.setAttribute("font-family", "var(--font-exo2), sans-serif"); + conclusionText3.setAttribute("fill", "#2e7d32"); + conclusionText3.textContent = "Perfect for your needs!"; + conclusionText3.style.opacity = "0"; + conclusionText3.style.animation = "fadeIn 0.5s ease-out 2.9s forwards"; + g.appendChild(conclusionText3); + + // Add CSS animations + const style = document.createElementNS("http://www.w3.org/2000/svg", "style"); + style.textContent = ` + @keyframes growBar { + from { + height: 0; + } + to { + height: var(--target-height); + y: var(--target-y); + } + } + @keyframes fadeIn { + from { + opacity: 0; + transform: translateY(10px); + } + to { + opacity: 1; + transform: translateY(0); + } + } + `; + svg.appendChild(style); + + }, [data]); + + if (!data) { + return null; + } + + return ( + + + + {title} + + + + + {/* Legend */} + + + + + HD-2024 + + + + + + HD-2025 + + + + + + ); +} \ No newline at end of file diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/charts/ProcessDiagram.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/charts/ProcessDiagram.js new file mode 100644 index 000000000..c5b96da55 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/charts/ProcessDiagram.js @@ -0,0 +1,303 @@ +"use client"; + +import React from 'react'; +import { Box, Typography, Paper } from '@mui/material'; +import { + CheckCircle, + Settings, + Truck, + MapPin, + Package, + Building2, + DollarSign, + Calendar, + Zap +} from 'lucide-react'; + +const ProcessDiagram = ({ data }) => { + const { title, steps, currentStep, orderInfo } = data; + + const getStepIcon = (stepName) => { + const iconProps = { size: 24 }; + + switch (stepName) { + case 'Order Placed': + return ; + case 'Processing': + return ; + case 'In Transit': + return ; + case 'Out for Delivery': + return ; + case 'Delivered': + return ; + default: + return ; + } + }; + + const getStepStyles = (isCompleted, isCurrent) => { + if (isCurrent) { + return { + iconColor: '#2196f3', + backgroundColor: '#e3f2fd', + borderColor: '#2196f3', + textColor: '#2196f3', + fontWeight: 600 + }; + } else if (isCompleted) { + return { + iconColor: '#4caf50', + backgroundColor: '#e8f5e8', + borderColor: '#4caf50', + textColor: '#4caf50', + fontWeight: 500 + }; + } else { + return { + iconColor: '#9e9e9e', + backgroundColor: '#fafafa', + borderColor: '#e0e0e0', + textColor: '#757575', + fontWeight: 400 + }; + } + }; + + const isStepCompleted = (stepName) => { + if (!steps || !currentStep) return false; + const currentIndex = steps.findIndex(step => step.name === currentStep); + const stepIndex = steps.findIndex(step => step.name === stepName); + return stepIndex < currentIndex; + }; + + const isCurrentStep = (stepName) => stepName === currentStep; + + return ( + + + + {title} + + + + + {/* Progress Steps */} + + {steps && steps.map((step, index) => { + const styles = getStepStyles( + isStepCompleted(step.name), + isCurrentStep(step.name) + ); + + return ( + + + + {getStepIcon(step.name)} + + + {step.name} + + + + {index < steps.length - 1 && ( + + )} + + ); + })} + + + {/* Order Information */} + {orderInfo && ( + + + Order Details + + + + + + + + Supplier + + + {orderInfo.supplier} + + + + + + + + + Order Value + + + {orderInfo.orderValue} + + + + + + + + + Tracking Number + + + {orderInfo.tracking} + + + + + + + + + Carrier + + + {orderInfo.carrier} + + + + + + + + + Estimated Delivery + + + {orderInfo.estimatedDelivery} + + + + + + + + + Delivery Location + + + {orderInfo.deliveryLocation} + + + + + + )} + + + + ); +}; + +export default ProcessDiagram; \ No newline at end of file diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/charts/RadarChart.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/charts/RadarChart.js new file mode 100644 index 000000000..cf1ccc981 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/charts/RadarChart.js @@ -0,0 +1,224 @@ +"use client"; + +import { Box, Typography } from "@mui/material"; +import { motion } from "framer-motion"; +import { useEffect, useRef } from "react"; + +export default function RadarChart({ data, title = "Comparison Chart" }) { + const svgRef = useRef(null); + + useEffect(() => { + if (!data || !svgRef.current) return; + + const svg = svgRef.current; + const size = 300; + const center = size / 2; + const maxRadius = 120; + + // Clear previous content + svg.innerHTML = ''; + + // Create the radar grid + const levels = 5; + const metrics = data.metrics || []; + const items = data.items || []; + + if (metrics.length === 0) return; + + const angleSlice = (Math.PI * 2) / metrics.length; + + // Draw concentric circles (grid) + for (let level = 1; level <= levels; level++) { + const radius = (maxRadius / levels) * level; + const circle = document.createElementNS("http://www.w3.org/2000/svg", "circle"); + circle.setAttribute("cx", center); + circle.setAttribute("cy", center); + circle.setAttribute("r", radius); + circle.setAttribute("fill", "none"); + circle.setAttribute("stroke", "#e0e0e0"); + circle.setAttribute("stroke-width", "1"); + svg.appendChild(circle); + } + + // Draw axis lines + metrics.forEach((metric, i) => { + const angle = angleSlice * i - Math.PI / 2; + const x = center + Math.cos(angle) * maxRadius; + const y = center + Math.sin(angle) * maxRadius; + + const line = document.createElementNS("http://www.w3.org/2000/svg", "line"); + line.setAttribute("x1", center); + line.setAttribute("y1", center); + line.setAttribute("x2", x); + line.setAttribute("y2", y); + line.setAttribute("stroke", "#e0e0e0"); + line.setAttribute("stroke-width", "1"); + svg.appendChild(line); + + // Add labels + const labelRadius = maxRadius + 20; + const labelX = center + Math.cos(angle) * labelRadius; + const labelY = center + Math.sin(angle) * labelRadius; + + const text = document.createElementNS("http://www.w3.org/2000/svg", "text"); + text.setAttribute("x", labelX); + text.setAttribute("y", labelY); + text.setAttribute("text-anchor", "middle"); + text.setAttribute("dominant-baseline", "middle"); + text.setAttribute("font-size", "12"); + text.setAttribute("font-family", "var(--font-exo2), sans-serif"); + text.setAttribute("fill", "#666"); + text.textContent = metric; + svg.appendChild(text); + }); + + // Draw data for each item + const colors = ["#2196f3", "#ff9800"]; + + items.forEach((item, itemIndex) => { + if (!item.values || item.values.length !== metrics.length) return; + + const color = colors[itemIndex] || "#666"; + let pathData = ""; + + item.values.forEach((value, i) => { + const angle = angleSlice * i - Math.PI / 2; + const radius = (value / 100) * maxRadius; // Assuming values are 0-100 + const x = center + Math.cos(angle) * radius; + const y = center + Math.sin(angle) * radius; + + if (i === 0) { + pathData += `M ${x} ${y}`; + } else { + pathData += ` L ${x} ${y}`; + } + }); + pathData += " Z"; // Close the path + + // Create animated path + const path = document.createElementNS("http://www.w3.org/2000/svg", "path"); + path.setAttribute("d", pathData); + path.setAttribute("fill", color); + path.setAttribute("fill-opacity", "0.2"); + path.setAttribute("stroke", color); + path.setAttribute("stroke-width", "2"); + + // Add animation + const totalLength = path.getTotalLength?.() || 0; + if (totalLength > 0) { + path.style.strokeDasharray = totalLength; + path.style.strokeDashoffset = totalLength; + path.style.animation = `drawPath 1.5s ease-in-out ${itemIndex * 0.3}s forwards`; + } + + svg.appendChild(path); + + // Add data points + item.values.forEach((value, i) => { + const angle = angleSlice * i - Math.PI / 2; + const radius = (value / 100) * maxRadius; + const x = center + Math.cos(angle) * radius; + const y = center + Math.sin(angle) * radius; + + const circle = document.createElementNS("http://www.w3.org/2000/svg", "circle"); + circle.setAttribute("cx", x); + circle.setAttribute("cy", y); + circle.setAttribute("r", "4"); + circle.setAttribute("fill", color); + circle.setAttribute("stroke", "white"); + circle.setAttribute("stroke-width", "2"); + circle.style.animation = `fadeIn 0.5s ease-in-out ${0.5 + itemIndex * 0.3}s forwards`; + circle.style.opacity = "0"; + svg.appendChild(circle); + }); + }); + + // Add CSS animation styles + const style = document.createElementNS("http://www.w3.org/2000/svg", "style"); + style.textContent = ` + @keyframes drawPath { + to { + stroke-dashoffset: 0; + } + } + @keyframes fadeIn { + to { + opacity: 1; + } + } + `; + svg.appendChild(style); + + }, [data]); + + if (!data || !data.metrics || !data.items) { + return null; + } + + return ( + + + + {title} + + + + + {/* Legend */} + + {data.items.map((item, index) => ( + + + + {item.name} + + + ))} + + + + ); +} \ No newline at end of file diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/charts/ScatterChart.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/charts/ScatterChart.js new file mode 100644 index 000000000..8023cd9b5 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/charts/ScatterChart.js @@ -0,0 +1,277 @@ +"use client"; + +import { Box, Typography } from "@mui/material"; +import { motion } from "framer-motion"; +import { useEffect, useRef } from "react"; + +export default function ScatterChart({ data, title = "Defect Analysis" }) { + const svgRef = useRef(null); + + useEffect(() => { + if (!data || !svgRef.current) return; + + const svg = svgRef.current; + const width = 450; + const height = 300; + const margin = { top: 20, right: 20, bottom: 50, left: 60 }; + const plotWidth = width - margin.left - margin.right; + const plotHeight = height - margin.top - margin.bottom; + + // Clear previous content + svg.innerHTML = ''; + + // Create main group + const g = document.createElementNS("http://www.w3.org/2000/svg", "g"); + g.setAttribute("transform", `translate(${margin.left}, ${margin.top})`); + svg.appendChild(g); + + // Create scales + const maxX = Math.max(...data.points.map(p => p.x)); + const maxY = Math.max(...data.points.map(p => p.y)); + + const scaleX = (x) => (x / maxX) * plotWidth; + const scaleY = (y) => plotHeight - (y / maxY) * plotHeight; + + // Draw grid lines + for (let i = 0; i <= 5; i++) { + const x = (i / 5) * plotWidth; + const y = (i / 5) * plotHeight; + + // Vertical grid lines + const vLine = document.createElementNS("http://www.w3.org/2000/svg", "line"); + vLine.setAttribute("x1", x); + vLine.setAttribute("y1", 0); + vLine.setAttribute("x2", x); + vLine.setAttribute("y2", plotHeight); + vLine.setAttribute("stroke", "#f0f0f0"); + vLine.setAttribute("stroke-width", "1"); + g.appendChild(vLine); + + // Horizontal grid lines + const hLine = document.createElementNS("http://www.w3.org/2000/svg", "line"); + hLine.setAttribute("x1", 0); + hLine.setAttribute("y1", y); + hLine.setAttribute("x2", plotWidth); + hLine.setAttribute("y2", y); + hLine.setAttribute("stroke", "#f0f0f0"); + hLine.setAttribute("stroke-width", "1"); + g.appendChild(hLine); + } + + // Draw axes + const xAxis = document.createElementNS("http://www.w3.org/2000/svg", "line"); + xAxis.setAttribute("x1", 0); + xAxis.setAttribute("y1", plotHeight); + xAxis.setAttribute("x2", plotWidth); + xAxis.setAttribute("y2", plotHeight); + xAxis.setAttribute("stroke", "#333"); + xAxis.setAttribute("stroke-width", "2"); + g.appendChild(xAxis); + + const yAxis = document.createElementNS("http://www.w3.org/2000/svg", "line"); + yAxis.setAttribute("x1", 0); + yAxis.setAttribute("y1", 0); + yAxis.setAttribute("x2", 0); + yAxis.setAttribute("y2", plotHeight); + yAxis.setAttribute("stroke", "#333"); + yAxis.setAttribute("stroke-width", "2"); + g.appendChild(yAxis); + + // Add safe zone (0-8 hours) + const safeZoneWidth = scaleX(8); + const safeZone = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + safeZone.setAttribute("x", 0); + safeZone.setAttribute("y", 0); + safeZone.setAttribute("width", safeZoneWidth); + safeZone.setAttribute("height", plotHeight); + safeZone.setAttribute("fill", "#4caf50"); + safeZone.setAttribute("fill-opacity", "0.1"); + g.appendChild(safeZone); + + // Add danger zone (16+ hours) + const dangerZoneStart = scaleX(16); + const dangerZone = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + dangerZone.setAttribute("x", dangerZoneStart); + dangerZone.setAttribute("y", 0); + dangerZone.setAttribute("width", plotWidth - dangerZoneStart); + dangerZone.setAttribute("height", plotHeight); + dangerZone.setAttribute("fill", "#f44336"); + dangerZone.setAttribute("fill-opacity", "0.1"); + g.appendChild(dangerZone); + + // Draw data points with animation + data.points.forEach((point, index) => { + const cx = scaleX(point.x); + const cy = scaleY(point.y); + + let color = "#2196f3"; // Default blue + if (point.motor === "HD-2024") { + color = point.x <= 8 ? "#4caf50" : "#ff9800"; // Green in safe zone, orange outside + } else if (point.motor === "HD-2025") { + color = "#9c27b0"; // Purple + } + + const circle = document.createElementNS("http://www.w3.org/2000/svg", "circle"); + circle.setAttribute("cx", cx); + circle.setAttribute("cy", cy); + circle.setAttribute("r", "5"); + circle.setAttribute("fill", color); + circle.setAttribute("stroke", "white"); + circle.setAttribute("stroke-width", "2"); + circle.style.opacity = "0"; + circle.style.animation = `scatterFadeIn 0.5s ease-in-out ${0.5 + index * 0.1}s forwards`; + + g.appendChild(circle); + }); + + // Add axis labels + const xLabel = document.createElementNS("http://www.w3.org/2000/svg", "text"); + xLabel.setAttribute("x", plotWidth / 2); + xLabel.setAttribute("y", plotHeight + 35); + xLabel.setAttribute("text-anchor", "middle"); + xLabel.setAttribute("font-size", "12"); + xLabel.setAttribute("font-family", "var(--font-exo2), sans-serif"); + xLabel.setAttribute("fill", "#666"); + xLabel.textContent = "Operating Hours per Day"; + g.appendChild(xLabel); + + const yLabel = document.createElementNS("http://www.w3.org/2000/svg", "text"); + yLabel.setAttribute("x", -35); + yLabel.setAttribute("y", plotHeight / 2); + yLabel.setAttribute("text-anchor", "middle"); + yLabel.setAttribute("transform", `rotate(-90, -35, ${plotHeight / 2})`); + yLabel.setAttribute("font-size", "12"); + yLabel.setAttribute("font-family", "var(--font-exo2), sans-serif"); + yLabel.setAttribute("fill", "#666"); + yLabel.textContent = "Defect Rate (%)"; + g.appendChild(yLabel); + + // Add zone labels + const safeLabel = document.createElementNS("http://www.w3.org/2000/svg", "text"); + safeLabel.setAttribute("x", safeZoneWidth / 2); + safeLabel.setAttribute("y", 15); + safeLabel.setAttribute("text-anchor", "middle"); + safeLabel.setAttribute("font-size", "10"); + safeLabel.setAttribute("font-family", "var(--font-exo2), sans-serif"); + safeLabel.setAttribute("fill", "#4caf50"); + safeLabel.setAttribute("font-weight", "bold"); + safeLabel.textContent = "SAFE ZONE"; + g.appendChild(safeLabel); + + const dangerLabel = document.createElementNS("http://www.w3.org/2000/svg", "text"); + dangerLabel.setAttribute("x", dangerZoneStart + (plotWidth - dangerZoneStart) / 2); + dangerLabel.setAttribute("y", 15); + dangerLabel.setAttribute("text-anchor", "middle"); + dangerLabel.setAttribute("font-size", "10"); + dangerLabel.setAttribute("font-family", "var(--font-exo2), sans-serif"); + dangerLabel.setAttribute("fill", "#f44336"); + dangerLabel.setAttribute("font-weight", "bold"); + dangerLabel.textContent = "HIGH RISK"; + g.appendChild(dangerLabel); + + // Add CSS animation + const style = document.createElementNS("http://www.w3.org/2000/svg", "style"); + style.textContent = ` + @keyframes scatterFadeIn { + from { + opacity: 0; + transform: scale(0); + } + to { + opacity: 1; + transform: scale(1); + } + } + `; + svg.appendChild(style); + + }, [data]); + + if (!data || !data.points) { + return null; + } + + return ( + + + + {title} + + + + + {/* Legend */} + + + + + HD-2024 (Safe Zone) + + + + + + HD-2024 (High Risk) + + + + + + HD-2025 + + + + + + ); +} \ No newline at end of file diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/chat/ArchitectureDiagram.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/chat/ArchitectureDiagram.js new file mode 100644 index 000000000..9d6e67d35 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/chat/ArchitectureDiagram.js @@ -0,0 +1,370 @@ +"use client"; + +import { Box, Typography } from "@mui/material"; +import { useEffect, useState, useMemo, useCallback, useRef } from "react"; +import { motion, AnimatePresence } from "framer-motion"; +import { + ReactFlow, + Background, + useNodesState, + useEdgesState, + Handle, + Position, + BaseEdge, + getBezierPath, +} from "@xyflow/react"; +import "@xyflow/react/dist/style.css"; +import { Wrench, Sparkles, Database, Globe, FileText, Code, Search, Mail } from "lucide-react"; +import { MCPService } from "../../services/mcpService"; + +// Icon mapping for different tool types +const getToolIcon = (serverId, serverName) => { + const name = (serverName || serverId || "").toLowerCase(); + if (name.includes("database") || name.includes("sql") || name.includes("db")) return Database; + if (name.includes("web") || name.includes("fetch") || name.includes("http")) return Globe; + if (name.includes("file") || name.includes("doc")) return FileText; + if (name.includes("code") || name.includes("script")) return Code; + if (name.includes("search")) return Search; + if (name.includes("mail") || name.includes("email")) return Mail; + return Wrench; +}; + +// Oracle Redwood color palette +const REDWOOD_PRIMARY = "#161513"; // Oracle Black +const REDWOOD_RED = "#C74634"; // Oracle Red +const REDWOOD_ACCENT = "#8B5D33"; // Warm brown + +// Color palette for tool nodes - filled with low opacity, border at full opacity +const TOOL_COLORS = [ + { border: "#C74634", fill: "rgba(199, 70, 52, 0.08)", icon: "#C74634" }, // Oracle Red + { border: "#8B5D33", fill: "rgba(139, 93, 51, 0.08)", icon: "#8B5D33" }, // Warm brown + { border: "#5C5650", fill: "rgba(92, 86, 80, 0.08)", icon: "#5C5650" }, // Dark gray-brown + { border: "#6B8E23", fill: "rgba(107, 142, 35, 0.08)", icon: "#6B8E23" }, // Olive green + { border: "#4682B4", fill: "rgba(70, 130, 180, 0.08)", icon: "#4682B4" }, // Steel blue + { border: "#A0522D", fill: "rgba(160, 82, 45, 0.08)", icon: "#A0522D" }, // Sienna +]; + +// Central model node - simple and clean design +function ModelNode({ data }) { + return ( + + {/* Handles on all sides */} + + + + + + {/* Main square with rounded corners - red theme */} + + + + {data.label} + + + + ); +} + +// Tool node with colorful styling - filled with low opacity, border at full opacity +function ToolNode({ data }) { + const Icon = getToolIcon(data.serverId, data.label); + const color = TOOL_COLORS[data.colorIndex % TOOL_COLORS.length]; + + return ( + + {/* Handles on all sides */} + + + + + + {/* Main circle - filled with low opacity, border at full opacity */} + + + + {data.label} + + + + ); +} + +// Custom animated edge with dashed line +function AnimatedEdge({ id, sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition, data }) { + const [edgePath] = getBezierPath({ + sourceX, + sourceY, + sourcePosition, + targetX, + targetY, + targetPosition, + curvature: 0.25, + }); + + const color = data?.color || "#D1D5DB"; + const delay = data?.delay || 0; + + return ( + <> + {/* Main dashed path with fade-in animation */} + + + + + ); +} + +const nodeTypes = { model: ModelNode, tool: ToolNode }; +const edgeTypes = { animated: AnimatedEdge }; + +// Helper to get the best handle based on angle +function getHandles(angle) { + const a = ((angle % 360) + 360) % 360; + if (a >= 315 || a < 45) return { source: "right", target: "left" }; + if (a >= 45 && a < 135) return { source: "bottom", target: "top" }; + if (a >= 135 && a < 225) return { source: "left", target: "right" }; + return { source: "top", target: "bottom" }; +} + +export default function ArchitectureDiagram({ selectedModel }) { + const [enabledTools, setEnabledTools] = useState([]); + const [servers, setServers] = useState([]); + const [sessionDisabledServers, setSessionDisabledServers] = useState(new Set()); + const hasFittedRef = useRef(false); + const reactFlowInstance = useRef(null); + + const handleInit = useCallback((instance) => { + reactFlowInstance.current = instance; + if (!hasFittedRef.current) { + instance.fitView({ padding: 0.4, maxZoom: 1 }); + hasFittedRef.current = true; + } + }, []); + + useEffect(() => { + const refresh = () => { + setEnabledTools(MCPService.getEnabledTools()); + setServers(MCPService.getServers()); + }; + + const handleSessionChange = (e) => { + const disabled = e.detail?.disabledServers || []; + setSessionDisabledServers(new Set(disabled)); + }; + + refresh(); + + // Refresh when window gains focus (user returns from settings) + window.addEventListener("focus", refresh); + // Refresh on storage changes (cross-tab) + window.addEventListener("storage", refresh); + // Refresh on custom event from ToolsTab (same window) + window.addEventListener("mcp-tools-changed", refresh); + // Listen for session toggle changes from ChatInput + window.addEventListener("mcp-session-changed", handleSessionChange); + + return () => { + window.removeEventListener("focus", refresh); + window.removeEventListener("storage", refresh); + window.removeEventListener("mcp-tools-changed", refresh); + window.removeEventListener("mcp-session-changed", handleSessionChange); + }; + }, []); + + const uniqueServers = useMemo( + () => [...new Set(enabledTools.map((t) => t.split(":")[0]))] + .filter(serverId => !sessionDisabledServers.has(serverId)), + [enabledTools, sessionDisabledServers] + ); + + const modelLabel = selectedModel?.split(".").pop() || "AI Model"; + + const { nodes: initialNodes, edges: initialEdges } = useMemo(() => { + const nodes = []; + const edges = []; + + const centerX = 230; + const centerY = 180; + const radius = 130; + const modelSize = 100; + const toolSize = 70; + + // Model at center + nodes.push({ + id: "model", + type: "model", + position: { x: centerX - modelSize / 2, y: centerY - modelSize / 2 }, + data: { label: modelLabel }, + draggable: false, + }); + + // Tools around + uniqueServers.forEach((serverId, i) => { + const angle = (i * 360) / uniqueServers.length - 90; + const rad = (angle * Math.PI) / 180; + const x = centerX + Math.cos(rad) * radius - toolSize / 2; + const y = centerY + Math.sin(rad) * radius - toolSize / 2; + + const server = servers.find((s) => s.id === serverId); + const toolCount = enabledTools.filter((t) => t.startsWith(serverId)).length; + const handles = getHandles(angle); + const delay = 0.2 + i * 0.15; + + nodes.push({ + id: serverId, + type: "tool", + position: { x, y }, + data: { + label: server?.name || serverId, + serverId, + toolCount, + colorIndex: i, + delay, + }, + draggable: false, + }); + + edges.push({ + id: `e-${serverId}`, + source: "model", + target: serverId, + sourceHandle: handles.source, + targetHandle: handles.target, + type: "animated", + data: { color: "#D1D5DB", delay: delay + 1 }, + }); + }); + + return { nodes, edges }; + }, [modelLabel, uniqueServers, servers, enabledTools]); + + const [nodes, setNodes, onNodesChange] = useNodesState(initialNodes); + const [edges, setEdges, onEdgesChange] = useEdgesState(initialEdges); + + useEffect(() => { + setNodes(initialNodes); + setEdges(initialEdges); + }, [initialNodes, initialEdges, setNodes, setEdges]); + + return ( + + + + + + ); +} diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/chat/ChatInput.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/chat/ChatInput.js new file mode 100644 index 000000000..8ff30a3fc --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/chat/ChatInput.js @@ -0,0 +1,1159 @@ +"use client"; + +import { KeyboardReturn } from "@mui/icons-material"; +import { Badge, Box, Chip, IconButton, ListSubheader, Menu, MenuItem, TextField, Tooltip, Typography, Divider, Dialog, DialogContent } from "@mui/material"; +import { ChevronDown, ChevronUp, ChevronRight, Paperclip, ImagePlus, FileText, Wrench, Settings, X, FileText as TextIcon, Search, FileSearch, Database, Plug, Puzzle, Presentation, FolderOpen, Terminal, Brain, Copy, Check, CircleStop } from "lucide-react"; + + +const BrainFreezeIcon = ({ size = 16, color = "currentColor", style }) => ( + + + +); +import { AnimatePresence, motion } from "framer-motion"; +import { useState, useEffect, memo, useCallback, useImperativeHandle, forwardRef, useRef } from "react"; +import { MCPService } from "../../services/mcpService"; +import IOSSwitch from "../ui/IOSSwitch"; +import { withBase } from "../../../lib/withBase"; + +export const TEXT_EXTENSIONS = ['.txt', '.md', '.json', '.js', '.ts', '.jsx', '.tsx', '.css', '.html', '.xml', '.csv', '.log', '.py', '.java', '.c', '.cpp', '.h', '.sql', '.yaml', '.yml', '.sh', '.env']; +const LONG_TEXT_THRESHOLD = 500; + +function CopyButton({ content }) { + const [copied, setCopied] = useState(false); + const handleCopy = () => { + if (!content) return; + navigator.clipboard.writeText(content); + setCopied(true); + setTimeout(() => setCopied(false), 1500); + }; + return ( + + {copied ? : } + + ); +} + +const NATIVE_TOOLS_META = { + native_web_search: { name: "Web Search", icon: Search, color: "#4285F4" }, + native_code_interpreter: { name: "Code Interpreter", icon: Terminal, color: "#10B981" }, + native_rag: { name: "File Search", icon: FileSearch, color: "#8B5CF6" }, + native_text_to_sql: { name: "Text to SQL", icon: Database, color: "#F59E0B" }, +}; + +const DrawioLogoSmall = ({ size = 14, color = "#F08705" }) => ( + + + + + + + + +); + +const ADDON_TOOLS_META = { + addon_drawio: { name: "OCI Draw.io", color: "#F08705", LogoComponent: DrawioLogoSmall }, + addon_sdd: { name: "OCI SDD Generator", color: "#0EA5E9", icon: FileText }, + addon_ppt: { name: "OCI PPT Generator", color: "#EF4444", icon: Presentation }, +}; + +const ChatInput = memo(forwardRef(function ChatInput({ + onSubmit, + onStop, + placeholder, + fontSize, + disabled = false, + isLoading = false, + compact = false, + models, + selectedModel, + onModelChange, + accentColor, + isDarkBg = false, + onAttachmentsChange, +}, ref) { + const iconColor = accentColor || (isDarkBg ? "rgba(255,255,255,0.5)" : "rgba(0, 0, 0, 0.4)"); + const iconOpacity = 1; + const [value, setValue] = useState(""); + const [attachMenuAnchor, setAttachMenuAnchor] = useState(null); + const [toolsMenuAnchor, setToolsMenuAnchor] = useState(null); + const [servers, setServers] = useState([]); + const [sessionDisabledServers, setSessionDisabledServers] = useState(new Set()); + const [attachedImages, setAttachedImages] = useState([]); + const [attachedTexts, setAttachedTexts] = useState([]); + + useEffect(() => { + onAttachmentsChange?.(attachedImages.length + attachedTexts.length); + }, [attachedImages.length, attachedTexts.length, onAttachmentsChange]); + const [textDialogOpen, setTextDialogOpen] = useState(null); + const [imageDialogOpen, setImageDialogOpen] = useState(null); + const [modelMenuAnchor, setModelMenuAnchor] = useState(null); + const localInputRef = useRef(null); + const imageInputRef = useRef(null); + const fileInputRef = useRef(null); + + const [nativeTools, setNativeTools] = useState([]); + const [selectedVsNames, setSelectedVsNames] = useState([]); // [{id, name}] + const [thinkingMenuAnchor, setThinkingMenuAnchor] = useState(null); + const [reasoningEffort, setReasoningEffort] = useState(() => { + if (typeof window !== 'undefined') { + return localStorage.getItem('reasoningEffort') || 'off'; + } + return 'off'; + }); + + // Reasoning-capable model detection + const REASONING_PATTERNS = ['o4-mini', 'gpt-5.4', 'grok-4-reasoning', 'o3', 'o4']; + const isReasoningModel = selectedModel && REASONING_PATTERNS.some(p => selectedModel.includes(p)); + + // Persist reasoning effort + const handleReasoningEffortChange = useCallback((effort) => { + setReasoningEffort(effort); + localStorage.setItem('reasoningEffort', effort); + setThinkingMenuAnchor(null); + }, []); + + // Load enabled servers and native tools + useEffect(() => { + const updateServers = () => { + const allServers = MCPService.getServers().filter(s => s.enabled); + setServers(allServers); + }; + const updateNativeTools = () => { + try { + const stored = localStorage.getItem('nativeToolsEnabled'); + const state = stored ? JSON.parse(stored) : {}; + // Filter out coming-soon tools (native_text_to_sql) + const comingSoon = new Set(['native_text_to_sql']); + setNativeTools(Object.entries(state).filter(([id, v]) => v && !comingSoon.has(id)).map(([id]) => id)); + } catch { setNativeTools([]); } + }; + const updateKnowledge = async () => { + try { + const ids = JSON.parse(localStorage.getItem('ragVectorStoreIds') || '[]'); + if (ids.length === 0) { setSelectedVsNames([]); return; } + const res = await fetch('/api/vector-stores'); + if (res.ok) { + const data = await res.json(); + const vsMap = Object.fromEntries((data.data || []).map(vs => [vs.id, vs.name])); + setSelectedVsNames(ids.map(id => ({ id, name: vsMap[id] || id }))); + } else { + setSelectedVsNames(ids.map(id => ({ id, name: id }))); + } + } catch { setSelectedVsNames([]); } + }; + updateServers(); + updateNativeTools(); + updateKnowledge(); + + const handleStorage = (e) => { + if (e.key === MCPService.STORAGE_KEYS.SERVERS) updateServers(); + if (e.key === 'nativeToolsEnabled') updateNativeTools(); + if (e.key === 'ragVectorStoreIds') updateKnowledge(); + }; + const handleToolsChanged = () => { updateServers(); updateNativeTools(); updateKnowledge(); }; + window.addEventListener('storage', handleStorage); + window.addEventListener('mcp-tools-changed', handleToolsChanged); + return () => { + window.removeEventListener('storage', handleStorage); + window.removeEventListener('mcp-tools-changed', handleToolsChanged); + }; + }, []); + + // Dispatch event when session disabled servers change + useEffect(() => { + window.dispatchEvent(new CustomEvent("mcp-session-changed", { + detail: { disabledServers: Array.from(sessionDisabledServers) } + })); + }, [sessionDisabledServers]); + + // Get file extension from name + const getFileExtension = (name) => { + if (!name) return null; + const match = name.match(/\.([^.]+)$/); + return match ? match[1].toLowerCase() : null; + }; + + // Add text attachment helper + const addTextAttachment = useCallback((content, name = null) => { + setAttachedTexts(prev => { + if (prev.length >= 4) return prev; + return [...prev, { + id: `${Date.now()}-${Math.random().toString(36).slice(2, 11)}`, + name, + ext: getFileExtension(name), + content, + preview: content.slice(0, 200).replace(/\n/g, ' ') + (content.length > 200 ? '...' : ''), + }]; + }); + }, []); + + // Process image files + const processImageFile = useCallback((file) => { + const reader = new FileReader(); + reader.onload = (event) => { + setAttachedImages(prev => [...prev, { + id: `${Date.now()}-${Math.random().toString(36).slice(2, 11)}`, + name: file.name, + type: file.type, + base64: event.target.result, + preview: event.target.result, + }]); + }; + reader.readAsDataURL(file); + }, []); + + // Process text files + const processTextFile = useCallback((file) => { + const reader = new FileReader(); + reader.onload = (event) => { + addTextAttachment(event.target.result, file.name); + }; + reader.readAsText(file); + }, [addTextAttachment]); + + // Process PDF files - extract text content + const processPdfFile = useCallback(async (file) => { + try { + const pdfjsLib = await import('pdfjs-dist'); + pdfjsLib.GlobalWorkerOptions.workerSrc = withBase('/pdf.worker.min.mjs'); + + const arrayBuffer = await file.arrayBuffer(); + const pdf = await pdfjsLib.getDocument({ data: arrayBuffer }).promise; + const textParts = []; + + for (let i = 1; i <= pdf.numPages; i++) { + const page = await pdf.getPage(i); + const content = await page.getTextContent(); + const pageText = content.items.map(item => item.str).join(' '); + if (pageText.trim()) textParts.push(pageText); + } + + const fullText = textParts.join('\n\n'); + if (fullText.trim()) { + addTextAttachment(fullText, file.name); + } else { + // Fallback: no extractable text (scanned PDF) + const sizeKB = (file.size / 1024).toFixed(1); + addTextAttachment(`[PDF sin texto extraíble - ${sizeKB} KB, ${pdf.numPages} páginas]`, file.name); + } + } catch (err) { + console.error('PDF extraction error:', err); + const sizeKB = (file.size / 1024).toFixed(1); + addTextAttachment(`[Error al leer PDF - ${sizeKB} KB]`, file.name); + } + }, [addTextAttachment]); + + // Process XLSX files - extract text content + const processXlsxFile = useCallback(async (file) => { + try { + const XLSX = await import('xlsx'); + const arrayBuffer = await file.arrayBuffer(); + const workbook = XLSX.read(arrayBuffer, { type: 'array' }); + const textParts = []; + + for (const sheetName of workbook.SheetNames) { + const sheet = workbook.Sheets[sheetName]; + const rows = XLSX.utils.sheet_to_json(sheet, { header: 1, defval: '' }); + if (rows.length === 0) continue; + + const lines = rows.map(row => row.join('\t')); + textParts.push(`[${sheetName}]\n${lines.join('\n')}`); + } + + const fullText = textParts.join('\n\n'); + if (fullText.trim()) { + addTextAttachment(fullText, file.name); + } else { + const sizeKB = (file.size / 1024).toFixed(1); + addTextAttachment(`[XLSX sin datos - ${sizeKB} KB, ${workbook.SheetNames.length} hojas]`, file.name); + } + } catch (err) { + console.error('XLSX extraction error:', err); + const sizeKB = (file.size / 1024).toFixed(1); + addTextAttachment(`[Error al leer XLSX - ${sizeKB} KB]`, file.name); + } + }, [addTextAttachment]); + + // Check if file is a text file + const isTextFile = useCallback((file) => { + return file.type.startsWith('text/') || + TEXT_EXTENSIONS.some(ext => file.name.toLowerCase().endsWith(ext)); + }, []); + + // Check if file is a PDF + const isPdfFile = useCallback((file) => { + return file.type === 'application/pdf' || file.name.toLowerCase().endsWith('.pdf'); + }, []); + + // Check if file is an Excel file + const isXlsxFile = useCallback((file) => { + const xlsxTypes = [ + 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + 'application/vnd.ms-excel', + ]; + return xlsxTypes.includes(file.type) || + /\.(xlsx|xls)$/i.test(file.name); + }, []); + + // Process files (images, text, PDFs, and XLSX) + const processFiles = useCallback((files) => { + Array.from(files).forEach(file => { + if (file.type.startsWith('image/')) { + processImageFile(file); + } else if (isPdfFile(file)) { + processPdfFile(file); + } else if (isXlsxFile(file)) { + processXlsxFile(file); + } else if (isTextFile(file)) { + processTextFile(file); + } + }); + }, [processImageFile, processPdfFile, processXlsxFile, processTextFile, isPdfFile, isXlsxFile, isTextFile]); + + // Expose methods to parent + useImperativeHandle(ref, () => ({ + focus: () => localInputRef.current?.focus(), + clear: () => { + setValue(""); + setAttachedImages([]); + setAttachedTexts([]); + }, + getValue: () => value, + getSessionActiveServers: () => servers.filter(s => !sessionDisabledServers.has(s.id)).map(s => s.id), + getAttachedImages: () => attachedImages, + getAttachedTexts: () => attachedTexts, + addFiles: (files) => processFiles(files), + })); + + const handleServerToggle = useCallback((serverId) => { + setSessionDisabledServers(prev => { + const next = new Set(prev); + if (next.has(serverId)) { + next.delete(serverId); + } else { + next.add(serverId); + } + return next; + }); + }, []); + + const handleChange = useCallback((e) => setValue(e.target.value), []); + + const handleImageSelect = useCallback((e) => { + processFiles(e.target.files); + e.target.value = ''; + }, [processFiles]); + + const handleRemoveImage = useCallback((imageId) => { + setAttachedImages(prev => prev.filter(img => img.id !== imageId)); + }, []); + + const handleRemoveText = useCallback((textId) => { + setAttachedTexts(prev => prev.filter(t => t.id !== textId)); + }, []); + + // Paste handler - images, files, and long text + const handlePaste = useCallback((e) => { + const items = e.clipboardData?.items; + const files = e.clipboardData?.files; + + // If there are actual files (from drag or file paste), process them with filenames + if (files?.length > 0) { + e.preventDefault(); + processFiles(files); + return; + } + + // Check for image or text file items + if (items) { + for (let i = 0; i < items.length; i++) { + const item = items[i]; + if (item.type.startsWith('image/')) { + e.preventDefault(); + const file = item.getAsFile(); + if (file) processImageFile(file); + return; + } + // Check for text files (e.g., .csv, .txt pasted from file manager) + if (item.kind === 'file' && isTextFile({ type: item.type, name: '' })) { + e.preventDefault(); + const file = item.getAsFile(); + if (file) processTextFile(file); + return; + } + } + } + + // Only treat as plain text paste if no files involved + const pastedText = e.clipboardData.getData('text'); + if (pastedText && pastedText.length >= LONG_TEXT_THRESHOLD) { + e.preventDefault(); + addTextAttachment(pastedText); + } + }, [processImageFile, processFiles, processTextFile, isTextFile, addTextAttachment]); + + const canSubmit = !disabled && (value.length > 0 || attachedImages.length > 0 || attachedTexts.length > 0); + + const handleKeyDown = useCallback((e) => { + if (e.key === "Enter" && !e.shiftKey) { + e.preventDefault(); + if (canSubmit) { + onSubmit(value.trim(), attachedImages, attachedTexts); + setValue(""); + setAttachedImages([]); + setAttachedTexts([]); + } + } + }, [value, attachedImages, attachedTexts, canSubmit, onSubmit]); + + const handleSubmitClick = useCallback(() => { + if (canSubmit) { + onSubmit(value.trim(), attachedImages, attachedTexts); + setValue(""); + setAttachedImages([]); + setAttachedTexts([]); + } + }, [value, attachedImages, attachedTexts, canSubmit, onSubmit]); + + const handleAddPhotos = useCallback(() => { + setAttachMenuAnchor(null); + imageInputRef.current?.click(); + }, []); + + return ( + + {/* Attachments preview */} + + {(attachedImages.length > 0 || attachedTexts.length > 0) && ( + + + {/* Images */} + {attachedImages.length > 0 && ( + + {attachedImages.map(img => ( + setImageDialogOpen(img)} + sx={{ + position: "relative", + width: 80, + height: 80, + flexShrink: 0, + cursor: "pointer", + "&:hover .remove-btn": { opacity: 1 }, + }} + > + + {img.name} + + { e.stopPropagation(); handleRemoveImage(img.id); }} + sx={{ + position: "absolute", + top: -6, + right: -6, + backgroundColor: "rgba(0,0,0,0.6)", + color: "white", + padding: "2px", + opacity: 0, + transition: "opacity 0.15s", + "&:hover": { backgroundColor: "rgba(0,0,0,0.8)" }, + }} + > + + + + ))} + + )} + + {/* Text files */} + {attachedTexts.length > 0 && ( + + {attachedTexts.map(txt => { + // File type styles + const fileStyles = { + csv: { border: "#4CAF50", chip: "rgba(76, 175, 80, 0.15)", chipText: "#2e7d32" }, + json: { border: "#FF9800", chip: "rgba(255, 152, 0, 0.15)", chipText: "#e65100" }, + pdf: { border: "#F44336", chip: "rgba(244, 67, 54, 0.15)", chipText: "#c62828" }, + txt: { border: "#42A5F5", chip: "rgba(66, 165, 245, 0.15)", chipText: "#1976d2" }, + md: { border: "#2196F3", chip: "rgba(33, 150, 243, 0.15)", chipText: "#1565c0" }, + xlsx: { border: "#217346", chip: "rgba(33, 115, 70, 0.15)", chipText: "#145a32" }, + xls: { border: "#217346", chip: "rgba(33, 115, 70, 0.15)", chipText: "#145a32" }, + sql: { border: "#9C27B0", chip: "rgba(156, 39, 176, 0.15)", chipText: "#7b1fa2" }, + py: { border: "#3776AB", chip: "rgba(55, 118, 171, 0.15)", chipText: "#2c5f8a" }, + js: { border: "#F7DF1E", chip: "rgba(247, 223, 30, 0.2)", chipText: "#8a7800" }, + ts: { border: "#3178C6", chip: "rgba(49, 120, 198, 0.15)", chipText: "#235a9e" }, + default: { border: "#9E9E9E", chip: "rgba(0,0,0,0.1)", chipText: "rgba(0,0,0,0.5)" }, + }; + const style = fileStyles[txt.ext] || fileStyles.default; + const extLabel = txt.ext || "txt"; + + return ( + setTextDialogOpen(txt)} + sx={{ + position: "relative", + cursor: "pointer", + width: 120, + flexShrink: 0, + mb: "4px", + "&:hover .remove-btn": { opacity: 1 }, + }} + > + {/* Stacked back layer */} + + {/* Main card */} + + + + + {txt.name || "Pasted"} + + + + + {txt.preview} + + + + + {[0.3, 0.5, 0.8].map((o, i) => )} + + + .{extLabel} + + + + { e.stopPropagation(); handleRemoveText(txt.id); }} + sx={{ + position: "absolute", + top: -6, + right: -6, + zIndex: 2, + backgroundColor: style.border, + color: "white", + padding: "2px", + opacity: 0, + transition: "opacity 0.15s", + "&:hover": { backgroundColor: style.chipText }, + }} + > + + + + ); + })} + + )} + + + )} + + + {/* Input row */} + + + + + setAttachMenuAnchor(e.currentTarget)} + sx={{ + color: iconColor, + opacity: 1, + marginTop: "4px", + "&:hover": { backgroundColor: isDarkBg ? "rgba(255,255,255,0.06)" : "rgba(0, 0, 0, 0.04)" }, + }} + size="medium" + > + + + + {/* Model selector (mobile compact mode) */} + {models && onModelChange && ( + <> + + setModelMenuAnchor(e.currentTarget)} + sx={{ + color: iconColor, + opacity: iconOpacity, + "&:hover": { backgroundColor: isDarkBg ? "rgba(255,255,255,0.06)" : "rgba(0, 0, 0, 0.04)" }, + }} + size="medium" + > + + + + setModelMenuAnchor(null)} + PaperProps={{ sx: { maxHeight: 400 } }} + > + {(() => { + const groups = {}; + models.forEach((m) => { + const provider = m.split(".")[0]; + if (!groups[provider]) groups[provider] = []; + groups[provider].push(m); + }); + const providerLabels = { openai: "OpenAI", xai: "xAI", google: "Google", cohere: "Cohere", meta: "Meta" }; + return Object.entries(groups).flatMap(([provider, items]) => [ + + {providerLabels[provider] || provider} + , + ...items.map((m) => ( + { + onModelChange(m); + setModelMenuAnchor(null); + }} + sx={{ fontSize: "0.95rem", pl: 3, display: "flex", alignItems: "center", gap: 1, fontWeight: selectedModel === m ? 600 : 400 }} + > + {m.replace(/^[a-z]+\./, "")} + {m === "xai.grok-4-1-fast-reasoning" && ( + + )} + + )), + ]); + })()} + + + )} + {(() => { + const badgeAppMode = typeof window !== 'undefined' ? (localStorage.getItem('appMode') || 'internal') : 'internal'; + const visibleServers = badgeAppMode === 'client' ? servers.filter(s => !s.isAddon) : servers; + const totalTools = nativeTools.length + visibleServers.length; + return ( + + setToolsMenuAnchor(e.currentTarget)} + sx={{ + color: iconColor, + opacity: iconOpacity, + "&:hover": { backgroundColor: isDarkBg ? "rgba(255,255,255,0.06)" : "rgba(0, 0, 0, 0.04)" }, + }} + size="medium" + > + + + + ); + })()} + {/* Thinking effort selector — only for reasoning models */} + {isReasoningModel && ( + <> + + setThinkingMenuAnchor(e.currentTarget)} + sx={{ + color: iconColor, + opacity: iconOpacity, + "&:hover": { backgroundColor: isDarkBg ? "rgba(255,255,255,0.06)" : "rgba(0, 0, 0, 0.04)" }, + }} + size="medium" + > + + + + + + setThinkingMenuAnchor(null)} + slotProps={{ + paper: { + sx: { + width: 160, + p: 0.5, + backgroundColor: isDarkBg ? "#242424" : "#fff", + color: isDarkBg ? "#e5e5e5" : "#1a1a1a", + border: isDarkBg ? "1px solid rgba(255,255,255,0.08)" : "1px solid rgba(0,0,0,0.08)", + }, + }, + }} + > + + Thinking effort + + {[ + { value: "off", label: "Off", desc: "No thinking, fastest" }, + { value: "low", label: "Low", desc: "Quick, simple tasks" }, + { value: "medium", label: "Medium", desc: "Balanced (default)" }, + { value: "high", label: "High", desc: "Complex reasoning" }, + ].map(opt => ( + handleReasoningEffortChange(opt.value)} + sx={{ + fontSize: "0.85rem", + borderRadius: 1, + mx: 0.5, + display: "flex", + flexDirection: "column", + alignItems: "flex-start", + py: 0.75, + color: isDarkBg ? "#e5e5e5" : "#1a1a1a", + "&:hover": { backgroundColor: isDarkBg ? "rgba(255,255,255,0.06)" : "rgba(0,0,0,0.04)" }, + "&.Mui-selected": { backgroundColor: isDarkBg ? "rgba(255,255,255,0.08)" : "rgba(0,0,0,0.06)" }, + "&.Mui-selected:hover": { backgroundColor: isDarkBg ? "rgba(255,255,255,0.12)" : "rgba(0,0,0,0.08)" }, + }} + > + + {opt.label} + + + {opt.desc} + + + ))} + + + )} + + + {isLoading ? ( + + ) : ( + + )} + + + + {/* Hidden file inputs */} + + { processFiles(e.target.files); e.target.value = ''; }} + style={{ display: "none" }} + /> + + {/* Attach menu */} + setAttachMenuAnchor(null)} + > + + + Add photos + + { setAttachMenuAnchor(null); fileInputRef.current?.click(); }} sx={{ fontSize: "0.9rem", gap: 1 }}> + + Add files + + + + {/* Tools menu */} + setToolsMenuAnchor(null)} + slotProps={{ + paper: { + sx: { + width: 200, + p: 1, + pb: 0.5, + backgroundColor: isDarkBg ? "#242424" : "#fff", + color: isDarkBg ? "#e5e5e5" : "#1a1a1a", + border: isDarkBg ? "1px solid rgba(255,255,255,0.08)" : "1px solid rgba(0,0,0,0.08)", + }, + }, + }} + > + {(() => { + const isBrowser = typeof window !== 'undefined'; + const currentAppMode = isBrowser ? (localStorage.getItem('appMode') || 'internal') : 'internal'; + const isClientMode = currentAppMode === 'client'; + const addonEnabled = (() => { if (!isBrowser) return {}; try { return JSON.parse(localStorage.getItem('addonToolsEnabled') || '{}'); } catch { return {}; } })(); + const addonServers = isClientMode ? [] : servers.filter(s => s.isAddon && addonEnabled[s.id] !== false); + const customServers = servers.filter(s => !s.isNative && !s.isAddon); + const ragEnabled = nativeTools.includes('native_rag') && selectedVsNames.length > 0; + const hasAny = nativeTools.length > 0 || addonServers.length > 0 || customServers.length > 0; + + if (!hasAny) { + return ( + + No tools active + + ); + } + + const ToolChip = ({ icon, label, color, bg, textColor }) => { + const resolvedBg = bg || (isDarkBg ? `${color}22` : `${color}12`); + const resolvedText = textColor || (isDarkBg ? "#e5e5e5" : color); + return ( + + {icon} + {label} + + ); + }; + + const SectionLabel = ({ label }) => ( + + {label} + + ); + + const sections = []; + + if (nativeTools.length > 0) { + sections.push( + + + {nativeTools.map(id => { + const meta = NATIVE_TOOLS_META[id]; + if (!meta) return null; + const Icon = meta.icon; + return } label={meta.name} color={meta.color} />; + })} + + ); + } + + if (addonServers.length > 0) { + sections.push( + + + {addonServers.map(server => { + const meta = ADDON_TOOLS_META[server.id]; + const color = meta?.color || "#6B7280"; + const iconColor = meta?.textColor || color; + const icon = meta?.LogoComponent + ? + : meta?.icon + ? + : ; + return ; + })} + + ); + } + + if (ragEnabled) { + sections.push( + + + {selectedVsNames.map(vs => ( + } label={vs.name} color="#8B5CF6" /> + ))} + + ); + } + + if (customServers.length > 0) { + sections.push( + + + {customServers.map(server => ( + } label={server.name} color="#6B7280" /> + ))} + + ); + } + + return sections.map((section, i) => ( + + {i > 0 && } + {section} + + )); + })()} + + { + setToolsMenuAnchor(null); + window.location.href = '/settings/tools'; + }} + sx={{ + fontSize: "0.8rem", + gap: 1, + py: 0.5, + minHeight: "auto", + borderRadius: 1, + color: isDarkBg ? "#e5e5e5" : "#1a1a1a", + "&:hover": { backgroundColor: isDarkBg ? "rgba(255,255,255,0.06)" : "rgba(0,0,0,0.04)" }, + }} + > + + Manage tools + + + + + + {/* Text preview dialog */} + setTextDialogOpen(null)} + maxWidth="md" + fullWidth + slotProps={{ + paper: { sx: { borderRadius: 2, maxHeight: "80vh" } } + }} + > + + + + + {textDialogOpen?.name || "Pasted content"} + + + {textDialogOpen?.content && ( + <> + {(new Blob([textDialogOpen.content]).size / 1024).toFixed(2)} KB • {textDialogOpen.content.split('\n').length.toLocaleString()} lines + + )} + + + + + setTextDialogOpen(null)}> + + + + + + + + {textDialogOpen?.content} + + + + + + + {/* Image preview dialog */} + setImageDialogOpen(null)} + maxWidth="lg" + slotProps={{ + paper: { sx: { borderRadius: 2, backgroundColor: "rgba(0,0,0,0.9)" } } + }} + > + + setImageDialogOpen(null)} + sx={{ + position: "absolute", + top: 8, + right: 8, + backgroundColor: "rgba(255,255,255,0.1)", + color: "white", + zIndex: 1, + "&:hover": { backgroundColor: "rgba(255,255,255,0.2)" }, + }} + > + + + {imageDialogOpen && ( + {imageDialogOpen.name} + )} + + + + ); +})); + +export default ChatInput; diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/chat/ChatMessage.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/chat/ChatMessage.js new file mode 100644 index 000000000..8917ea40b --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/chat/ChatMessage.js @@ -0,0 +1,2174 @@ +"use client"; + +import { memo, useMemo, useState, useEffect, useRef } from "react"; +import { Close as CloseIcon } from "@mui/icons-material"; +import { + Box, + Button, + Chip, + CircularProgress, + Collapse, + Dialog, + DialogContent, + IconButton, + Paper, + Stack, + Tooltip, + Typography, +} from "@mui/material"; +import { motion, AnimatePresence } from "framer-motion"; +import Image from "next/image"; +import { Check, Copy, ChevronDown as ChevronDownIcon, Code, FileText, X, Brain, Terminal, RotateCcw } from "lucide-react"; +import ReactMarkdown from "react-markdown"; +import remarkGfm from "remark-gfm"; +import JsonView from "@uiw/react-json-view"; + +import Sources from "../agent/Sources"; +import DotMatrixLoader from "../ui/DotMatrixLoader"; +import CostBenefitChart from "../charts/CostBenefitChart"; +import ProcessDiagram from "../charts/ProcessDiagram"; +import RadarChart from "../charts/RadarChart"; +import ScatterChart from "../charts/ScatterChart"; +import ProgressTracker from "../demo/ProgressTracker"; +import SupplierCard from "../demo/SupplierCard"; +import DustReveal from "../ui/DustReveal"; +import DynamicChip from "../ui/DynamicChip"; +import InteractiveChoice from "../ui/InteractiveChoice"; +import TypingEffect from "../ui/TypingEffect"; +import CitationCard from "../ui/CitationCard"; +import { Widget, WidgetV2 } from "../widgets"; +import { serializeWidgetV2Tree } from "../../utils/widgetV2Parser"; +import { groupMessages } from "../../utils/messageUtils"; +import { AlertTriangle, Mail, ChevronDown, KeyRound } from "lucide-react"; + +// Friendly names for OCI internal tools +const OCI_INTERNAL_LABELS = { + oci_internal_search_memory: 'Memory', +}; + +// Format tool names: "text_to_speech" -> "Text to speech" +const formatToolName = (name) => { + if (!name) return name; + if (OCI_INTERNAL_LABELS[name]) return OCI_INTERNAL_LABELS[name]; + return name + .replace(/_/g, ' ') + .replace(/-/g, ' ') + .replace(/\b\w/, c => c.toUpperCase()); +}; + +// Copy to clipboard button with check feedback +function CopyTextButton({ content }) { + const [copied, setCopied] = useState(false); + const handleCopy = () => { + if (!content) return; + navigator.clipboard.writeText(content); + setCopied(true); + setTimeout(() => setCopied(false), 1500); + }; + return ( + + {copied ? : } + + ); +} + +// Bouncing dots animation for in-progress reasoning +function BouncingDots() { + return ( + + {[0, 1, 2].map(i => ( + + ))} + + ); +} + +// Reasoning summary block — matches mcp_chip_row style with staged entrance. +function ReasoningBlock({ text, done }) { + const [isOpen, setIsOpen] = useState(false); + const isStreaming = !done; + return ( + + + setIsOpen(!isOpen)} + sx={{ + display: "inline-flex", + alignItems: "center", + gap: 1, + px: 1.5, + py: 0.75, + borderRadius: "16px", + backgroundColor: isOpen ? "var(--dm-subtle, rgba(0, 0, 0, 0.08))" : "var(--dm-subtle, rgba(0, 0, 0, 0.04))", + border: "1px solid var(--dm-border, rgba(0, 0, 0, 0.15))", + fontFamily: "var(--font-exo2), sans-serif", + fontSize: "0.8rem", + color: "var(--dm-muted, rgba(0, 0, 0, 0.6))", + transition: "all 0.2s ease", + cursor: "pointer", + userSelect: "none", + "&:hover": { + backgroundColor: "var(--dm-subtle, rgba(0, 0, 0, 0.08))", + transform: "scale(1.03)", + }, + }} + > + + Reasoning + {isStreaming ? ( + + ) : ( + + )} + + + + {isOpen && ( + + + + {text} + + + + )} + + + ); +} + +// Code execution block — matches mcp_chip_row style with staged entrance. +// Supports streaming states: writing / interpreting / completed. +function CodeExecutionBlock({ code, output, status }) { + const isActive = status === 'writing' || status === 'in_progress' || status === 'interpreting'; + const isDone = status === 'completed' || !!output; + // Auto-expand while active so the user sees streaming code. Collapse when done. + const [userOpened, setUserOpened] = useState(null); // null = follow auto, true/false = user override + const autoOpen = isActive; + const isOpen = userOpened == null ? autoOpen : userOpened; + + const label = status === 'writing' ? 'Writing code…' + : status === 'interpreting' ? 'Executing…' + : status === 'in_progress' ? 'Starting…' + : 'Code executed'; + + return ( + + + setUserOpened(!isOpen)} + sx={{ + display: "inline-flex", + alignItems: "center", + gap: 1, + px: 1.5, + py: 0.75, + borderRadius: "16px", + backgroundColor: isOpen ? "var(--dm-subtle, rgba(0, 0, 0, 0.08))" : "var(--dm-subtle, rgba(0, 0, 0, 0.04))", + border: "1px solid var(--dm-border, rgba(0, 0, 0, 0.15))", + fontFamily: "var(--font-exo2), sans-serif", + fontSize: "0.8rem", + color: "var(--dm-muted, rgba(0, 0, 0, 0.6))", + transition: "all 0.2s ease", + cursor: "pointer", + userSelect: "none", + "&:hover": { + backgroundColor: "var(--dm-subtle, rgba(0, 0, 0, 0.08))", + transform: "scale(1.03)", + }, + }} + > + + {label} + {isActive ? : ( + + )} + + + + {isOpen && ( + + + + + {code} + + + {output && ( + + + Output + + + {output} + + + )} + + + )} + + + ); +} + +// Collapsible user message component +function CollapsibleUserMessage({ text, fontSize, isLatest }) { + const [isExpanded, setIsExpanded] = useState(false); + const [hasAnimated, setHasAnimated] = useState(false); + const isLongMessage = text.length > 150; + + const textStyles = { + color: "inherit", + fontSize: fontSize, + fontWeight: "100", + lineHeight: isLatest ? 2 : 1.6, + }; + + // Mark animation as complete after initial render + useEffect(() => { + if (isLatest && !hasAnimated) { + const timer = setTimeout(() => setHasAnimated(true), 1000); + return () => clearTimeout(timer); + } + }, [isLatest, hasAnimated]); + + if (!isLongMessage) { + return isLatest ? ( + + ) : ( + {text} + ); + } + + const clampStyles = { + display: "-webkit-box", + WebkitLineClamp: 2, + WebkitBoxOrient: "vertical", + overflow: "hidden", + }; + + return ( + setIsExpanded(!isExpanded)} + sx={{ cursor: "pointer" }} + > + {isLatest && !hasAnimated ? ( + + ) : ( + + {text} + + )} + + + + + ); +} + +const TYPING_SPEED = 8; + +// Component to render mailto links as buttons +function MailtoButton({ href, children }) { + const handleClick = () => { + window.location.href = href; + }; + + return ( + + ); +} + +// Custom link component that opens in new tab +const MarkdownLink = ({ href, children }) => ( + + {children} + +); + +// Markdown components config - defined at module level for reuse +const markdownComponents = { + a: MarkdownLink, +}; + +// Preprocess text to extract mailto links and render them separately +function TextWithMailto({ content }) { + // Check if content contains mailto: links + const mailtoRegex = /(mailto:[^\s\]]+)/g; + const matches = content.match(mailtoRegex); + + if (!matches) { + return {content}; + } + + // Split content by mailto links + const parts = content.split(mailtoRegex); + + return ( + <> + {parts.map((part, index) => { + if (part.startsWith("mailto:")) { + return ; + } + return part ? ( + + {part} + + ) : null; + })} + + ); +} + +// Renders the expanded chip content with all its variants +function ChipExpandedContent({ activeChip }) { + if (!activeChip) return null; + + const { content, label } = activeChip; + + return ( + <> + + {label} + + + {typeof content === "string" ? ( + + {content} + + ) : content?.citations !== undefined ? ( + // Retrieval trace with citations + + + {content.description} + + {content.query && ( + + + Search Query: + + + "{content.query}" + + + )} + {content.citations?.length > 0 && ( + + + Sources Found ({content.citations.length}): + + + {content.citations.map((citation, idx) => ( + + ))} + + + )} + + ) : content?.description !== undefined || content?.details ? ( + + + {content.description} + + {content.details ? ( + + {content.details.input && ( + + Input: + + "{content.details.input}" + + + )} + {content.details.output && ( + + Output: + + + )} + {content.details.toolName && ( + + Tool Details: + + Tool: {content.details.toolName} + {content.details.invocation && ( + + Invocation: + { + try { + return JSON.parse(content.details.invocation); + } catch { + return { raw: content.details.invocation }; + } + })()} + collapsed={false} + style={{ backgroundColor: "rgba(0,0,0,0.02)", fontSize: "12px", padding: "8px", borderRadius: "4px" }} + /> + + )} + + + )} + + ) : ( + + )} + + ) : ( + + + + )} + + ); +} + +// Parses and renders action/observation output +function ActionObservationOutput({ output }) { + const sections = []; + const actionRegex = /Action:\s*```\s*([\s\S]*?)\s*```/g; + let lastIndex = 0; + let match; + + while ((match = actionRegex.exec(output)) !== null) { + const textBefore = output.substring(lastIndex, match.index).trim(); + if (textBefore?.startsWith("Observation:")) { + sections.push({ type: "observation", content: textBefore.replace("Observation:", "").trim() }); + } + sections.push({ type: "action", content: match[1] }); + lastIndex = match.index + match[0].length; + } + + const remaining = output.substring(lastIndex).trim(); + if (remaining) { + if (remaining.startsWith("Observation:")) { + sections.push({ type: "observation", content: remaining.replace("Observation:", "").trim() }); + } else { + sections.push({ type: "text", content: remaining }); + } + } + + return ( + + {sections.map((section, index) => ( + + {section.type === "action" && ( + <> + Action: + { + try { + return JSON.parse(section.content); + } catch { + return { error: "Invalid JSON", raw: section.content }; + } + })()} + collapsed={false} + style={{ backgroundColor: "rgba(0,0,0,0.02)", fontSize: "12px", padding: "8px", borderRadius: "4px" }} + /> + + )} + {section.type === "observation" && ( + <> + Observation: + + {section.content} + + + )} + {section.type === "text" && ( + + {section.content} + + )} + + ))} + + ); +} + +const MIN_DISPLAY_TIME = 1000; // Minimum time to show loading/thinking indicators + +const ChatMessage = memo(function ChatMessage({ + exchange, + exchangeIndex, + latestMessageRef, + contentFontSizes, + activeChips, + onChipChange, + copiedId, + onCopy, + getCopyContent, + onWidgetSubmit, + onOptionSelect, + onRetry, + isLoading, +}) { + const [textDialogOpen, setTextDialogOpen] = useState(null); + const [imageDialogOpen, setImageDialogOpen] = useState(null); + const [showRaw, setShowRaw] = useState(false); + const [traceDialogOpen, setTraceDialogOpen] = useState(false); + + // Single unified indicator: dots show continuously from loading through thinking. + // "Thinking..." label fades in when thinking message arrives — no gap, no flicker. + const [showIndicator, setShowIndicator] = useState(false); + const indicatorStartRef = useRef(null); + + // Content is ready when indicator is not showing or content already exists + const hasContent = exchange.responses.some(r => (r.type === "text" && r.content) || r.type === "widget" || r.type === "widget_v2" || r.type === "generated_image"); + const contentReady = !showIndicator || hasContent; + + // Compute grouping at render time instead of storing in state + const groupedResponses = useMemo(() => { + const groups = groupMessages(exchange.responses); + const sourcesGroups = groups.filter(g => g.type === 'sources'); + if (sourcesGroups.length > 0) console.log('[ChatMessage] Sources groups found:', sourcesGroups.length, sourcesGroups); + return groups; + }, [exchange.responses]); + + const getRawContent = () => { + return groupedResponses.map(group => { + if (group.type === "text") return group.content; + if (group.type === "widget" && group.widgetProps) { + const entries = Object.entries(group.widgetProps).map(([k, v]) => `${k}:${v}`).join('|'); + return `§§${entries}§§`; + } + if (group.type === "widget_v2" && group.tree) { + return `@@widget\n${serializeWidgetV2Tree(group.tree)}\n@@`; + } + return ""; + }).filter(Boolean).join("\n"); + }; + + // Conditions from props/exchange + const isInitialLoading = exchange.isLatest && isLoading && exchange.responses.length === 0; + const hasThinkingMessage = exchange.isLatest && exchange.responses.some(r => r.type === "thinking"); + const hasCallingChips = exchange.isLatest && exchange.responses.some(r => r.type === "mcp_chip" && r.status === "calling"); + // Detect gap after tool completion: chips are done but no text has arrived yet + const waitingAfterTools = exchange.isLatest && isLoading && + exchange.responses.some(r => r.type === "mcp_chip" && r.status === "completed") && + !exchange.responses.some(r => (r.type === "text" && r.content) || r.type === "widget" || r.type === "widget_v2"); + // Show indicator when loading/thinking, or waiting after tool call — but not while chips are actively calling + const shouldShowIndicator = (isInitialLoading || hasThinkingMessage || waitingAfterTools) && !hasCallingChips; + + useEffect(() => { + if (shouldShowIndicator && !showIndicator) { + indicatorStartRef.current = Date.now(); + setShowIndicator(true); + } else if (!shouldShowIndicator && showIndicator) { + // Calling chips skip MIN_DISPLAY_TIME — the chip IS the progress indicator + if (hasCallingChips) { + setShowIndicator(false); + return; + } + const elapsed = Date.now() - (indicatorStartRef.current || 0); + const remaining = MIN_DISPLAY_TIME - elapsed; + if (remaining > 0) { + const timer = setTimeout(() => setShowIndicator(false), remaining); + return () => clearTimeout(timer); + } else { + setShowIndicator(false); + } + } + }, [shouldShowIndicator, showIndicator, hasCallingChips]); + + return ( + + {/* User message */} + + + {exchange.widgetResponse ? null : ( + <> + {/* Attached images (current session) */} + {exchange.attachedImages && exchange.attachedImages.length > 0 && ( + + {exchange.attachedImages.map((img, idx) => ( + setImageDialogOpen(img)} + sx={{ + width: 80, + height: 80, + borderRadius: 1, + overflow: "hidden", + border: "1px solid rgba(0,0,0,0.1)", + cursor: "pointer", + "&:hover": { border: "1px solid rgba(0,0,0,0.25)" }, + }} + > + {img.name + + ))} + + )} + {/* Image placeholder (loaded from history) */} + {exchange.hasImageAttachment && !exchange.attachedImages && ( + + {Array.from({ length: exchange.imageCount || 1 }).map((_, idx) => ( + + 🖼️ + + ))} + + )} + {/* Attached texts */} + {exchange.attachedTexts && exchange.attachedTexts.length > 0 && ( + + {exchange.attachedTexts.map((txt, idx) => { + const fileStyles = { + csv: { border: "#4CAF50", chip: "rgba(76, 175, 80, 0.15)", chipText: "#2e7d32" }, + json: { border: "#FF9800", chip: "rgba(255, 152, 0, 0.15)", chipText: "#e65100" }, + pdf: { border: "#F44336", chip: "rgba(244, 67, 54, 0.15)", chipText: "#c62828" }, + txt: { border: "#42A5F5", chip: "rgba(66, 165, 245, 0.15)", chipText: "#1976d2" }, + md: { border: "#2196F3", chip: "rgba(33, 150, 243, 0.15)", chipText: "#1565c0" }, + sql: { border: "#9C27B0", chip: "rgba(156, 39, 176, 0.15)", chipText: "#7b1fa2" }, + py: { border: "#3776AB", chip: "rgba(55, 118, 171, 0.15)", chipText: "#2c5f8a" }, + js: { border: "#F7DF1E", chip: "rgba(247, 223, 30, 0.2)", chipText: "#8a7800" }, + ts: { border: "#3178C6", chip: "rgba(49, 120, 198, 0.15)", chipText: "#235a9e" }, + default: { border: "#9E9E9E", chip: "rgba(0,0,0,0.1)", chipText: "rgba(0,0,0,0.5)" }, + }; + const style = fileStyles[txt.ext] || fileStyles.default; + const extLabel = txt.ext || "txt"; + return ( + setTextDialogOpen(txt)} + sx={{ + position: "relative", + cursor: "pointer", + width: 120, + mb: "4px", + mr: "4px", + }} + > + {/* Stacked back layer */} + + {/* Main card */} + + + + + {txt.name || "Pasted"} + + + + + {txt.preview} + + + + + {[0.3, 0.5, 0.8].map((o, i) => )} + + + .{extLabel} + + + + + ); + })} + + )} + {/* Text message */} + {exchange.userMessage && + !exchange.userMessage.match(/^\[[\d]+ images?\]$/) && + !(exchange.userMessage === '[Pasted content]' && exchange.attachedTexts?.length > 0) && ( + + )} + + )} + + + + {/* Response */} + + + {groupedResponses + .filter(group => { + if (group.type === "thinking") return false; + if (!exchange.isLatest) return true; + if (!contentReady) return ["chipRow", "mcp_chip_row", "mcp_connecting", "reasoning"].includes(group.type); + return true; + }) + .map((group, groupIndex) => ( + + {group.type === "chipRow" && ( + + + {group.chips.map((chip) => { + const chipKey = `${exchangeIndex}-${groupIndex}-${chip.messageIndex}`; + return ( + onChipChange(chipData, chipKey)} + isActive={activeChips[chipKey]?.label === chip.label} + startDelay={0} + /> + ); + })} + + + key.startsWith(`${exchangeIndex}-${groupIndex}-`))}> + + { + const activeChipKey = Object.keys(activeChips).find((key) => + key.startsWith(`${exchangeIndex}-${groupIndex}-`) + ); + if (activeChipKey) onChipChange(null, activeChipKey); + }} + sx={{ + position: "absolute", + top: 8, + right: 8, + padding: 0.5, + color: "var(--dm-muted, rgba(0, 0, 0, 0.4))", + "&:hover": { backgroundColor: "var(--dm-subtle, rgba(0, 0, 0, 0.04))", color: "var(--dm-text, rgba(0, 0, 0, 0.6))" }, + }} + > + + + + key.startsWith(`${exchangeIndex}-${groupIndex}-`)) + ] + } + /> + + + + )} + + {group.type === "text" && ( + + + + + + + )} + + {group.type === "sources" && ( + + )} + + {group.type === "widget" && ( + + + + )} + + {group.type === "widget_v2" && ( + + + + )} + + {group.type === "generated_image" && (() => { + const imgSrc = `data:image/png;base64,${group.content}`; + return ( + + { + const w = window.open(); + w.document.write(``); + w.document.title = "Generated Image"; + }} + sx={{ + cursor: "pointer", + borderRadius: 2, + overflow: "hidden", + border: "1px solid rgba(0,0,0,0.08)", + display: "inline-block", + maxWidth: 512, + transition: "box-shadow 0.2s", + "&:hover": { boxShadow: "0 4px 20px rgba(0,0,0,0.12)" }, + }} + > + {group.revisedPrompt + + {group.revisedPrompt && ( + + {group.revisedPrompt} + + )} + + ); + })()} + + {group.type === "generated_image_placeholder" && ( + + + + + Image generated + + + {group.revisedPrompt && ( + + {group.revisedPrompt} + + )} + + )} + + {group.type === "reasoning" && ( + + )} + + {group.type === "code_execution" && ( + + )} + + {group.type === "error" && group.content === "mcp_auth_expired" && (() => { + // Resolve the failing server LOCALLY from storage so the banner can show + // the right copy and the right action per auth type. No guessing, no alerts. + const sanitize = (name) => { + let l = (name || '').replace(/[^a-zA-Z0-9_-]/g, '_'); + if (!/^[a-zA-Z]/.test(l)) l = 'mcp_' + l; + return l; + }; + let stored = []; + try { + if (typeof window !== 'undefined') { + stored = JSON.parse(localStorage.getItem('mcpServers') || '[]'); + } + } catch {} + const enabled = stored.filter(s => s.enabled !== false && s.endpoint && !s.isNative); + let server = null; + if (group.serverEndpoint) { + server = stored.find(s => s.endpoint === group.serverEndpoint) || null; + } + if (!server && group.serverLabel) { + server = enabled.find(s => sanitize(s.name) === group.serverLabel) || null; + // Also try matching among ALL stored (incl. disabled), in case the user + // disabled it after the error + if (!server) server = stored.find(s => sanitize(s.name) === group.serverLabel) || null; + } + if (!server && enabled.length === 1) { + server = enabled[0]; + } + if (typeof window !== 'undefined' && !window.__mcp_banner_logged) { + window.__mcp_banner_logged = true; + console.log('[mcp banner]', { + serverLabel: group.serverLabel, + serverEndpoint: group.serverEndpoint, + serverAuthType: group.serverAuthType, + resolved: server?.name || null, + enabledCount: enabled.length, + storedCount: stored.length, + }); + } + + const displayName = (server && server.name) || group.serverLabel || 'MCP connector'; + const authType = server?.authType || group.serverAuthType || null; + + // Per-authType copy + action + let title; + let description; + let buttonLabel; + let onClickAction; + const returnTo = typeof window !== 'undefined' ? window.location.pathname + window.location.search : '/'; + const openOAuth = () => { window.location.href = `/api/mcp/oauth/authorize?endpoint=${encodeURIComponent(server.endpoint)}&returnTo=${encodeURIComponent(returnTo)}`; }; + const openSettings = () => { window.location.href = server ? `/settings/tools?focus=${encodeURIComponent(server.id)}` : '/settings/tools'; }; + + if (authType === 'oauth2.1') { + title = `Authorization needed — ${displayName}`; + description = `Sign in to "${displayName}" to grant access. After authorizing you'll return here.`; + buttonLabel = 'Authorize'; + onClickAction = openOAuth; + } else if (authType === 'oauth2') { + title = `${displayName} is unreachable`; + description = `The OAuth 2.0 token was obtained, but the upstream server rejected the request. This is usually a temporary issue or a server-side bug. You can disable the tool or verify its configuration.`; + buttonLabel = 'Open in Settings'; + onClickAction = openSettings; + } else if (authType === 'api-key' || authType === 'bearer') { + title = `${displayName} credential rejected`; + description = `The upstream rejected the ${authType === 'bearer' ? 'bearer token' : 'API key'}. Update it in Settings to fix.`; + buttonLabel = 'Update credential'; + onClickAction = openSettings; + } else if (authType === 'none' || (server && !server.authType)) { + title = `${displayName} is unreachable`; + description = `The MCP server returned an error. This is likely a temporary upstream issue. You can disable the tool or check it later.`; + buttonLabel = 'Open in Settings'; + onClickAction = openSettings; + } else { + title = `${displayName} is unavailable`; + description = `An MCP connector failed. Open Settings to inspect.`; + buttonLabel = 'Open in Settings'; + onClickAction = openSettings; + } + + return ( + + + + {title} + + + {description} + + + + + ); + })()} + + {group.type === "error" && group.content !== "mcp_auth_expired" && (() => { + // Parse tool-model incompatibility errors for a friendly message + const toolModelMatch = group.content?.match(/Tool\(s\)\s*\[([^\]]+)\]\s*are only supported for\s*(.+?)\s*models/i); + // Format tool names: web_search → Web Search + const formatToolName = (name) => name.replace(/_/g, ' ').replace(/\b\w/g, c => c.toUpperCase()); + const friendlyMsg = toolModelMatch ? { + tools: toolModelMatch[1].split(',').map(t => formatToolName(t.trim())).join(', '), + providers: toolModelMatch[2], + } : null; + + return ( + + {friendlyMsg ? ( + <> + + Tool not supported by this model + + + {friendlyMsg.tools} {friendlyMsg.tools.includes(',') ? 'are' : 'is'} only available with {friendlyMsg.providers} models. You can either: + + + • Switch to an {friendlyMsg.providers} model
+ • Disable {friendlyMsg.tools} in Settings → Tools +
+ + ) : ( + <> + + Something went wrong + + + {group.content} + + {(group.opcRequestId || group.model || group.timestamp) && ( + + {group.opcRequestId && opc-request-id: {group.opcRequestId}} + {group.model && model: {group.model}} + {group.timestamp && time: {group.timestamp}} + + )} + {exchange.trace && ( + setTraceDialogOpen(true)} + sx={{ + display: "inline-flex", alignItems: "center", gap: 0.5, + fontSize: "0.7rem", color: "var(--dm-muted, rgba(0,0,0,0.4))", cursor: "pointer", mt: 1, + fontFamily: "var(--font-exo2), sans-serif", + "&:hover": { color: "#1976d2" }, + }} + > + View request trace + + )} + + )} +
+ ); + })()} + + {group.type === "mcp_connecting" && ( + + + + )} + + {group.type === "mcp_chip_row" && (() => { + const rowKey = `mcp-row-${exchangeIndex}-${groupIndex}`; + const selectedChipIndex = activeChips[rowKey]?.chipIndex; + const selectedChip = selectedChipIndex !== undefined ? group.chips[selectedChipIndex] : null; + const hasError = selectedChip?.status === "failed"; + const hasOutput = selectedChip?.output && selectedChip?.status === "completed"; + + // Check if selected chip output contains audioBase64 + let audioBase64 = null; + let outputMessage = null; + if (hasOutput && selectedChip?.output) { + try { + const parsed = JSON.parse(selectedChip.output); + if (parsed.audioBase64) { + audioBase64 = parsed.audioBase64; + outputMessage = parsed.message || (parsed.success ? "Audio generated successfully" : null); + } + } catch (e) { + // Not JSON, that's fine + } + } + + // Find all chips with audio for direct display + const audioChips = group.chips.filter(chip => { + if (chip.output && chip.status === "completed") { + try { + const parsed = JSON.parse(chip.output); + return parsed.audioBase64; + } catch (e) { + return false; + } + } + return false; + }); + + const directAudioList = audioChips.map(chip => { + try { return JSON.parse(chip.output).audioBase64; } catch (e) { return null; } + }).filter(Boolean); + + return ( + + {/* Horizontal scrollable chip row */} + + {group.chips.map((chip, chipIdx) => { + const chipHasOutput = chip.output && chip.status === "completed"; + const chipHasError = chip.status === "failed"; + const isClickable = chipHasOutput || chipHasError; + const isSelected = selectedChipIndex === chipIdx; + + return ( + { + if (isClickable) { + if (isSelected) { + onChipChange(null, rowKey); + } else { + onChipChange({ chipIndex: chipIdx }, rowKey); + } + } + }} + sx={{ + display: "inline-flex", + alignItems: "center", + gap: 1, + px: 1.5, + py: 0.75, + borderRadius: "16px", + flexShrink: 0, + backgroundColor: isSelected + ? (chipHasError ? "rgba(211, 47, 47, 0.15)" : "rgba(76, 175, 80, 0.15)") + : chip.status === "completed" + ? "rgba(76, 175, 80, 0.08)" + : chip.status === "failed" + ? "rgba(211, 47, 47, 0.08)" + : "var(--dm-subtle, rgba(0, 0, 0, 0.04))", + border: isSelected + ? (chipHasError ? "1px solid rgba(211, 47, 47, 0.5)" : "1px solid rgba(76, 175, 80, 0.5)") + : chip.status === "completed" + ? "1px solid rgba(76, 175, 80, 0.3)" + : chip.status === "failed" + ? "1px solid rgba(211, 47, 47, 0.3)" + : "1px solid var(--dm-border, rgba(0, 0, 0, 0.1))", + fontFamily: "var(--font-exo2), sans-serif", + fontSize: "0.8rem", + color: chip.status === "completed" + ? "#2e7d32" + : chip.status === "failed" + ? "#c62828" + : "var(--dm-muted, rgba(0, 0, 0, 0.6))", + transition: "all 0.2s ease", + cursor: isClickable ? "pointer" : "default", + userSelect: "none", + "&:hover": isClickable + ? { + backgroundColor: chipHasError ? "rgba(211, 47, 47, 0.12)" : "rgba(76, 175, 80, 0.12)", + transform: "scale(1.03)", + } + : {}, + }} + > + + {chip.status === "completed" ? ( + + + + ) : chip.status === "failed" ? ( + + + + ) : ( + + + + )} + + {(() => { + const showCompleted = (chip.status === "completed" || chip.status === "failed") && chip.tool; + if (!showCompleted) return chip.label; + const baseName = formatToolName(chip.tool); + if (chip.tool === 'file_search') { + let queries = []; + try { queries = chip.arguments ? (JSON.parse(chip.arguments).queries || []) : []; } catch {} + const parts = [baseName]; + if (queries.length === 1) { + const q = queries[0]; + parts.push(`"${q.length > 40 ? q.slice(0, 40) + '…' : q}"`); + } else if (queries.length > 1) { + parts.push(`${queries.length} searches`); + } + if (typeof chip.chunkCount === 'number' && chip.chunkCount > 0) { + parts.push(`${chip.chunkCount} chunk${chip.chunkCount === 1 ? '' : 's'}`); + } + return parts.join(' · '); + } + return baseName; + })()} + {isClickable && ( + + )} + + ); + })} + + + {/* Shared content panel */} + + + onChipChange(null, rowKey)} + sx={{ + position: "absolute", + top: -10, + right: -10, + padding: 0.5, + backgroundColor: "var(--dm-surface, white)", + border: "1px solid var(--dm-border, rgba(0, 0, 0, 0.1))", + color: "var(--dm-muted, rgba(0, 0, 0, 0.4))", + "&:hover": { backgroundColor: "var(--dm-subtle, rgba(0, 0, 0, 0.04))", color: "var(--dm-text, rgba(0, 0, 0, 0.6))" }, + }} + > + + + + {selectedChip && ( + + {/* Arguments section */} + {selectedChip.arguments && ( + + + Arguments + + { try { return JSON.parse(selectedChip.arguments); } catch { return { raw: selectedChip.arguments }; } })() + : selectedChip.arguments} + collapsed={1} + displayDataTypes={false} + style={{ + "--w-rjv-color": "var(--dm-text, #212121)", + "--w-rjv-key-string": "var(--dm-text, #212121)", + "--w-rjv-background-color": "transparent", + "--w-rjv-type-string-color": "#4caf50", + "--w-rjv-type-int-color": "#1976d2", + "--w-rjv-type-float-color": "#1976d2", + "--w-rjv-type-boolean-color": "#f57c00", + "--w-rjv-curlybraces-color": "var(--dm-muted, #5c5552)", + "--w-rjv-brackets-color": "var(--dm-muted, #5c5552)", + "--w-rjv-info-color": "var(--dm-muted, #5c5552)", + "--w-rjv-ellipsis-color": "var(--dm-muted, #5c5552)", + fontSize: "0.75rem", + fontFamily: "monospace", + }} + /> + + )} + + {/* Output or Error section */} + + + {hasError ? "Error" : "Output"} + + {hasError && ( + + + {selectedChip.error || selectedChip.output || "Tool execution failed"} + + {exchange.trace && ( + setTraceDialogOpen(true)} + sx={{ + display: "inline-flex", + alignItems: "center", + gap: 0.5, + fontSize: "0.7rem", + color: "var(--dm-muted, rgba(0,0,0,0.45))", + cursor: "pointer", + mb: selectedChip.output ? 1 : 0, + "&:hover": { color: "#1976d2" }, + }} + > + + View request trace + + )} + + )} + {hasError && selectedChip.output && selectedChip.output !== selectedChip.error && ( + <> + + Output + + + {selectedChip.output} + + + )} + {!hasError && ( + + {audioBase64 ? ( + + {outputMessage && ( + + {outputMessage} + + )} + + ) : !selectedChip.output ? ( + + No output returned + + ) : (() => { + // Try to parse as JSON for nice rendering + try { + const parsed = JSON.parse(selectedChip.output); + if (typeof parsed === 'object' && parsed !== null) { + return ( + + ); + } + // Parsed to a primitive (string, number, boolean) — render as text + return ( + + {String(parsed)} + + ); + } catch { + // Not JSON, render as markdown + return ( + + {selectedChip.output} + + ); + } + })()} + + )} + + + )} + + + + {/* Show audio players directly when chips have audio output */} + {directAudioList.length > 0 && directAudioList.map((audioBase64, audioIdx) => ( + + + + + ))} + + ); + })()} + + {group.type === "interactive" && ( + + + + )} + + {group.type === "progress_tracker" && } + {/* data_table type removed - tables use WidgetTable via v1 widget system */} + {group.type === "process_diagram" && } + {group.type === "supplier_card" && } + {group.type === "radar_chart" && } + {group.type === "scatter_chart" && } + {group.type === "cost_benefit_chart" && ( + + )} +
+ ))} +
+ + {/* Copy, PDF & Raw debug buttons */} + + {groupedResponses.length > 0 && (!isLoading || !exchange.isLatest) && contentReady && ( + + + + onCopy(getCopyContent(exchange), `exchange-${exchange.id}`)} + size="small" + sx={{ + color: "var(--dm-muted, rgba(0, 0, 0, 0.3))", + padding: 0, + "&:hover": { color: "var(--dm-text, rgba(0, 0, 0, 0.6))", backgroundColor: "transparent" }, + }} + > + {copiedId === `exchange-${exchange.id}` ? : } + + + + setShowRaw(prev => !prev)} + size="small" + sx={{ + color: showRaw ? "var(--dm-text, rgba(0, 0, 0, 0.6))" : "var(--dm-muted, rgba(0, 0, 0, 0.3))", + padding: 0, + "&:hover": { color: "var(--dm-text, rgba(0, 0, 0, 0.6))", backgroundColor: "transparent" }, + }} + > + + + + {exchange.isLatest && onRetry && ( + + onRetry()} + size="small" + sx={{ + color: "var(--dm-muted, rgba(0, 0, 0, 0.3))", + padding: 0, + "&:hover": { color: "var(--dm-text, rgba(0, 0, 0, 0.6))", backgroundColor: "transparent" }, + }} + > + + + + )} + + + )} + + + {/* Raw debug view */} + {showRaw && ( + + onCopy(getRawContent(), `raw-${exchange.id}`)} + sx={{ + position: "absolute", + top: 6, + right: 6, + color: copiedId === `raw-${exchange.id}` ? "var(--dm-text, rgba(0,0,0,0.6))" : "var(--dm-muted, rgba(0,0,0,0.25))", + padding: "3px", + "&:hover": { color: "var(--dm-text, rgba(0,0,0,0.6))", backgroundColor: "var(--dm-subtle, rgba(0,0,0,0.05))" }, + }} + > + {copiedId === `raw-${exchange.id}` ? : } + + + {getRawContent()} + + + )} + + {/* Loading/Thinking indicator — single continuous element */} + + {showIndicator && ( + + + + + {hasThinkingMessage && ( + + + Thinking... + + + )} + + + + )} + +
+ + {/* Text preview dialog */} + setTextDialogOpen(null)} + maxWidth="md" + fullWidth + PaperProps={{ + sx: { + borderRadius: 2, + maxHeight: "80vh", + backgroundColor: "var(--dm-surface, #fff)", + } + }} + > + + {/* Header */} + + + + Pasted content + + + {textDialogOpen?.content && ( + <> + {(new Blob([textDialogOpen.content]).size / 1024).toFixed(2)} KB • {textDialogOpen.content.split('\n').length.toLocaleString()} lines + + )} + + + + + setTextDialogOpen(null)} sx={{ color: "var(--dm-muted, inherit)" }}> + + + + + {/* Content */} + + + + {textDialogOpen?.content} + + + + + + + {/* Image preview dialog */} + setImageDialogOpen(null)} + maxWidth="md" + > + + {imageDialogOpen && ( + {imageDialogOpen.name + )} + + + {/* Request Trace Dialog */} + setTraceDialogOpen(false)} + maxWidth="md" + fullWidth + PaperProps={{ sx: { backgroundColor: "var(--dm-surface, #fff)", borderRadius: 2 } }} + > + + {exchange.trace && (() => { + const t = exchange.trace; + const copyTrace = () => { + const text = JSON.stringify(t, null, 2); + navigator.clipboard.writeText(text); + }; + return ( + + {/* Header */} + + + Request Trace + + + + Copy JSON + + setTraceDialogOpen(false)}> + + + + + + {/* Error banner */} + {t.error && ( + + {t.error} + + )} + + {/* Summary */} + + {[ + ["Request ID", t.requestId], + ["OPC Request ID", t.opcRequestId], + ["Model", t.model], + ["Started", t.startedAt], + ["Duration", t.completion ? `${Math.round(t.completion.elapsed / 1000)}s` : "—"], + ["Status", t.completion?.status || "incomplete"], + ["Output Tokens", t.completion?.outputTokens], + ["Total Tokens", t.completion?.totalTokens], + ].filter(([, v]) => v).map(([label, value]) => ( + + + {label} + + + {value} + + + ))} + + + {/* Tools */} + {Object.keys(t.tools).length > 0 && ( + + + Tool Calls + + {Object.entries(t.tools).map(([id, tool]) => ( + + + + {tool.tool} + + + {tool.server} + + + + {tool.startMs}ms{tool.endMs ? ` → ${tool.endMs}ms` : ""} + + + + ))} + + )} + + {/* Event Timeline */} + + + Event Timeline + + + {t.events.map((ev, i) => ( + + + {ev.ts}ms + + + {ev.type} + {ev.tool ? ` (${ev.tool})` : ""} + {ev.detail ? ` — ${ev.detail}` : ""} + + + ))} + + + + ); + })()} + + +
+ ); +}); + +export default ChatMessage; diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/chat/ChatSidebar.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/chat/ChatSidebar.js new file mode 100644 index 000000000..7d77561dc --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/chat/ChatSidebar.js @@ -0,0 +1,332 @@ +"use client"; + +import { Box, IconButton, Typography } from "@mui/material"; +import { AnimatePresence, motion } from "framer-motion"; +import { Settings, Upload } from "lucide-react"; +import { useRouter } from "next/navigation"; +import BlinkingEye from "../ui/BlinkingEye"; +import { memo, useState, useCallback, useRef, useEffect } from "react"; +import TypingEffect from "../ui/TypingEffect"; +import ScrollableList from "../ui/ScrollableList"; +import OracleLogo from "../ui/OracleLogo"; +import ChatInput, { TEXT_EXTENSIONS } from "./ChatInput"; + +const fontSizes = { xs: "1.5rem", sm: "1.8rem", md: "2rem" }; +const textFieldFontSizes = { xs: "1.1rem", sm: "1.3rem", md: "1.5rem" }; + +const commonTextStyles = { + fontSize: fontSizes, + fontWeight: 300, + textAlign: "left", + lineHeight: 1.4, + margin: 0, +}; + +const ChatSidebar = memo(function ChatSidebar({ + uiSettings, + showTextField, + chatHistoryLength, + inputRef, + onSubmit, + onStop, + recentConversations, + loadingConversations = false, + hasMoreConversations = false, + isLoadingMoreConversations = false, + onLoadMoreConversations, + activeConversationId, + onConversationClick, + onConversationDelete, + onRefreshConversations, + isLoading = false, + width = 30, + selectedModel, + + accentColor = "#C74634", + iconTint, + isDarkBg = false, +}) { + const router = useRouter(); + const [isDragging, setIsDragging] = useState(false); + const [attachmentCount, setAttachmentCount] = useState(0); + const inputWrapperRef = useRef(null); + const dragCounterRef = useRef(0); + + const isValidFile = useCallback((file) => { + return file.type.startsWith('image/') || + file.type.startsWith('text/') || + file.type === 'application/pdf' || + file.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' || + file.type === 'application/vnd.ms-excel' || + file.name.toLowerCase().endsWith('.pdf') || + /\.(xlsx|xls)$/i.test(file.name) || + TEXT_EXTENSIONS.some(ext => file.name.toLowerCase().endsWith(ext)); + }, []); + + const handleDragEnter = useCallback((e) => { + e.preventDefault(); + e.stopPropagation(); + dragCounterRef.current++; + + // Check if dragging files + if (e.dataTransfer?.types?.includes('Files')) { + setIsDragging(true); + } + }, []); + + const handleDragLeave = useCallback((e) => { + e.preventDefault(); + e.stopPropagation(); + dragCounterRef.current--; + if (dragCounterRef.current === 0) { + setIsDragging(false); + } + }, []); + + const handleDragOver = useCallback((e) => { + e.preventDefault(); + e.stopPropagation(); + }, []); + + const handleDrop = useCallback((e) => { + e.preventDefault(); + e.stopPropagation(); + setIsDragging(false); + dragCounterRef.current = 0; + + const files = e.dataTransfer?.files; + if (files?.length > 0 && inputRef?.current?.addFiles) { + // Filter valid files + const validFiles = Array.from(files).filter(isValidFile); + if (validFiles.length > 0) { + inputRef.current.addFiles(validFiles); + inputRef.current.focus(); + } + } + }, [inputRef, isValidFile]); + + return ( + + {/* Drop overlay */} + + {isDragging && ( + + + + Drop files here + + + Images and text files + + + )} + + + {/* Logo */} + + + {/* Welcome message - only shows when no chat history and no attachments */} + + {chatHistoryLength === 0 && attachmentCount === 0 && ( + + + + {(displayedText) => ( + + {displayedText} + + )} + + + {(displayedText) => ( + + {displayedText} + + )} + + + + )} + + + {/* Chat Input */} + + {showTextField && ( + + + + )} + + + {/* Bottom section - Recent conversations + Settings */} + + {/* Recent conversations */} + + { + if (item && item.id) { + onConversationClick(item); + } + }} + onItemDelete={onConversationDelete} + onRefresh={onRefreshConversations} + hasMore={hasMoreConversations} + isLoadingMore={isLoadingMoreConversations} + onLoadMore={onLoadMoreConversations} + /> + + + {/* Settings icon */} + + router.push("/settings")} + sx={{ + color: isDarkBg ? "rgba(255,255,255,0.4)" : "rgba(0, 0, 0, 0.3)", + p: 1, + "&:hover": { + backgroundColor: isDarkBg ? "rgba(255,255,255,0.06)" : "rgba(0, 0, 0, 0.04)", + color: isDarkBg ? "rgba(255,255,255,0.6)" : "rgba(0, 0, 0, 0.5)", + }, + }} + > + + + + + + ); +}); + +export default ChatSidebar; diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/demo/ProgressTracker.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/demo/ProgressTracker.js new file mode 100644 index 000000000..4b76e2e8e --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/demo/ProgressTracker.js @@ -0,0 +1,115 @@ +"use client"; + +import React from 'react'; +import { Box, Typography, Paper, LinearProgress, Chip } from '@mui/material'; +import { CheckCircle2, Clock, Hourglass } from 'lucide-react'; + +const ProgressTracker = ({ data }) => { + const { title, items } = data; + + const getStatusIcon = (status) => { + switch (status) { + case 'received': + return ; + case 'pending': + return ; + default: + return ; + } + }; + + const completedCount = items.filter(item => item.status === 'received').length; + const progressPercentage = (completedCount / items.length) * 100; + + return ( + + + + {title} + + + + + + Progress: {completedCount}/{items.length} responses + + + {Math.round(progressPercentage)}% + + + + + + + + + {items.map((item, index) => ( + + + {getStatusIcon(item.status)} + + + {item.supplier} + + + Response time: {item.responseTime} + + + + + + + + {item.status === 'received' ? 'Quote received' : 'Waiting...'} + + + + ))} + + + + ); +}; + +export default ProgressTracker; \ No newline at end of file diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/demo/SupplierCard.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/demo/SupplierCard.js new file mode 100644 index 000000000..cbed6a804 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/demo/SupplierCard.js @@ -0,0 +1,225 @@ +"use client"; + +import React from 'react'; +import { + Box, + Typography, + Paper, + Chip, + Grid, + LinearProgress +} from '@mui/material'; +import { + Building2, + Phone, + Mail, + Clock, + Star, + TrendingUp, + ShoppingCart +} from 'lucide-react'; + +const SupplierCard = ({ data }) => { + const { name, orderValue, performance, contact, notes } = data; + + const getStarRating = (rating) => { + const numRating = parseFloat(rating.split('/')[0]); + return Math.floor(numRating); + }; + + return ( + + + + + + + + + {name} + + + } + label={`Order Value: ${orderValue}`} + size="small" + variant="outlined" + sx={{ color: '#666', borderColor: '#ddd', fontSize: '0.75rem' }} + /> + + + + + + + + {/* Performance Metrics */} + + Performance Metrics + + + + + + + + + {performance.onTimeDelivery} + + + + On-Time Delivery + + + + + + + + + + + {performance.qualityRating} + + + + Quality Rating + + + {[1, 2, 3, 4, 5].map((star) => ( + + ))} + + + + + + + + + + {performance.totalOrders} + + + + Total Orders + + + Completed successfully + + + + + + {/* Contact Information */} + + Contact Information + + + + + + + + + Phone + + + {contact.phone} + + + + + + + + + + + Email + + + {contact.email} + + + + + + + + + + + Support Hours + + + {contact.supportHours} + + + + + + + {/* Notes */} + {notes && ( + + + {notes} + + + )} + + + ); +}; + +export default SupplierCard; \ No newline at end of file diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/settings/AITab.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/settings/AITab.js new file mode 100644 index 000000000..586f2e7a9 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/settings/AITab.js @@ -0,0 +1,243 @@ +"use client"; + +import { Box, TextField, Typography, Select, MenuItem, FormControl, InputLabel, Tooltip } from "@mui/material"; +import { motion } from "framer-motion"; +import { useState, useEffect } from "react"; +import { Zap, Database, Sparkles, RefreshCw, Info } from "lucide-react"; +import IOSSwitch from "../ui/IOSSwitch"; + +function generateSubjectId() { + return "user_" + crypto.randomUUID().replace(/-/g, "").slice(0, 12); +} + +const DEFAULT_AI_SETTINGS = { + ltmEnabled: false, + ltmSubjectId: "", + ltmAccessPolicy: "recall_and_store", + stmoEnabled: false, +}; + +const ACCESS_POLICY_OPTIONS = [ + { + value: "recall_and_store", + label: "Recall & Store", + description: "The AI remembers past info and saves new info from this conversation.", + }, + { + value: "recall_only", + label: "Recall Only", + description: "The AI remembers past info but won't save anything new from this conversation.", + }, + { + value: "store_only", + label: "Store Only", + description: "The AI saves new info from this conversation but can't recall past memories.", + }, +]; + +const SettingRow = ({ icon: Icon, iconColor, title, description, children }) => ( + + + + + + + {title} + + + {description} + + {children} + + +); + +export default function AITab() { + const [settings, setSettings] = useState(DEFAULT_AI_SETTINGS); + const [isHydrated, setIsHydrated] = useState(false); + + useEffect(() => { + const stored = localStorage.getItem("aiSettings"); + if (stored) { + try { + const parsed = JSON.parse(stored); + // Fix invalid access policy values from older versions + if (!["recall_and_store", "recall_only", "store_only"].includes(parsed.ltmAccessPolicy)) { + parsed.ltmAccessPolicy = "recall_and_store"; + } + setSettings({ ...DEFAULT_AI_SETTINGS, ...parsed }); + } catch (e) { + console.error("Error parsing AI settings:", e); + } + } + setIsHydrated(true); + }, []); + + useEffect(() => { + if (isHydrated) { + localStorage.setItem("aiSettings", JSON.stringify(settings)); + } + }, [settings, isHydrated]); + + const update = (key, value) => setSettings(prev => ({ ...prev, [key]: value })); + + // Auto-generate subject ID when LTM is enabled and no ID exists + const handleLtmToggle = (enabled) => { + update("ltmEnabled", enabled); + if (enabled && !settings.ltmSubjectId) { + update("ltmSubjectId", generateSubjectId()); + } + }; + + return ( + + {/* Memory Section */} + + Memory + + + + + handleLtmToggle(e.target.checked)} + /> + + {settings.ltmEnabled && ( + + {/* Subject ID */} + + + + Memory ID + + + + + + + + + update("ltmSubjectId", e.target.value)} + variant="outlined" + size="small" + fullWidth + sx={{ "& .MuiOutlinedInput-root": { fontSize: "0.82rem", fontFamily: "monospace" } }} + /> + + update("ltmSubjectId", generateSubjectId())} + sx={{ + p: 0.75, + borderRadius: 1, + cursor: "pointer", + color: "rgba(0,0,0,0.35)", + "&:hover": { backgroundColor: "rgba(0,0,0,0.05)", color: "rgba(0,0,0,0.6)" }, + display: "flex", + flexShrink: 0, + }} + > + + + + + + All conversations with this ID share the same memory. Changing it starts a separate memory space. + + + + {/* Access Policy */} + + + + Access Policy + + + + + + + {ACCESS_POLICY_OPTIONS.find(o => o.value === settings.ltmAccessPolicy)?.description} + + + + )} + + + + + update("stmoEnabled", e.target.checked)} + /> + + + + + {/* Info note */} + + + + LTM and STMO require enabling the corresponding features in your OCI GenAI Project settings (Console → Analytics & AI → Generative AI → Projects). + + + + ); +} diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/settings/FlowsTab.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/settings/FlowsTab.js new file mode 100644 index 000000000..d93d82c5c --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/settings/FlowsTab.js @@ -0,0 +1,131 @@ +"use client"; + +import { Plus, Trash2 } from "lucide-react"; +import { Box, IconButton, List, ListItem, ListItemText, Typography, Button, Switch, FormControlLabel } from "@mui/material"; +import { useRouter } from "next/navigation"; + +export default function FlowsTab({ flows, onDeleteFlow, onToggleFlow }) { + const router = useRouter(); + + return ( + + + + Flows ({flows.length}) + + + + + + {flows.map((flow, index) => ( + { + // Only navigate if not clicking on action buttons + if (!e.target.closest('.action-buttons') && !e.target.closest('button')) { + router.push(`/settings/flows/${flow.id || index}`); + } + }} + > + + + onToggleFlow(index, e)} + size="small" + sx={{ + "& .MuiSwitch-switchBase.Mui-checked": { + color: "var(--dm-text, #1a1a1a)", + }, + "& .MuiSwitch-switchBase.Mui-checked + .MuiSwitch-track": { + backgroundColor: "#1a1a1a", + }, + }} + /> + } + label="" + sx={{ margin: 0 }} + /> + { + e.stopPropagation(); + onDeleteFlow(index); + }} + size="small" + sx={{ + color: "rgba(0, 0, 0, 0.4)", + "&:hover": { + color: "red", + }, + }} + > + + + + + ))} + + + ); +} \ No newline at end of file diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/settings/GeneralTab.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/settings/GeneralTab.js new file mode 100644 index 000000000..2f6b8ddce --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/settings/GeneralTab.js @@ -0,0 +1,487 @@ +"use client"; + +import { Box, IconButton, TextField, Typography, Chip, createTheme, ThemeProvider, useTheme } from "@mui/material"; +import { motion } from "framer-motion"; +import Image from "next/image"; +import { useState, useEffect, useMemo } from "react"; +import IOSSwitch from "../ui/IOSSwitch"; +import { Building2, Moon, Sun, Settings as SettingsIcon, Users } from "lucide-react"; +import Header from "../ui/Header"; +import ChatSidebar from "../chat/ChatSidebar"; +import { DARK_BG } from "../../config/darkMode"; + + + +const STORAGE_KEYS = { + UI_SETTINGS: 'uiSettings', +}; + +const DEFAULT_UI_SETTINGS = { + appTitle: "OCI Enterprise AI Agents", + appLogo: "", + welcomeMessage: "Welcome back!", + inputPlaceholder: "Type anything...", + accentColor: "#C74634", + showLabChip: true, + showLabIcon: true, + darkMode: false, +}; + +export default function GeneralTab() { + const [uiSettings, setUiSettings] = useState(DEFAULT_UI_SETTINGS); + const [logoError, setLogoError] = useState(false); + const [isHydrated, setIsHydrated] = useState(false); + + const pAccent = uiSettings.accentColor || "#C74634"; + const isDarkBg = uiSettings.darkMode === true; + + const baseTheme = useTheme(); + const previewTheme = useMemo(() => { + if (!isDarkBg) return baseTheme; + return createTheme({ + ...baseTheme, + palette: { + ...baseTheme.palette, + mode: "dark", + background: { default: DARK_BG, paper: "#242424" }, + text: { primary: "#e5e5e5", secondary: "rgba(255,255,255,0.5)" }, + divider: "rgba(255,255,255,0.08)", + }, + }); + }, [isDarkBg, baseTheme]); + + // Load from localStorage after mount (client-only) + useEffect(() => { + const storedUiSettings = localStorage.getItem(STORAGE_KEYS.UI_SETTINGS); + if (storedUiSettings) { + try { + setUiSettings(JSON.parse(storedUiSettings)); + } catch (e) { + console.error('Error parsing stored UI settings:', e); + } + } + setIsHydrated(true); + }, []); + + // Save UI settings to localStorage whenever they change (after hydration) + useEffect(() => { + if (isHydrated) { + localStorage.setItem(STORAGE_KEYS.UI_SETTINGS, JSON.stringify(uiSettings)); + window.dispatchEvent(new CustomEvent('uiSettingsChanged', { detail: uiSettings })); + } + }, [uiSettings, isHydrated]); + + return ( + + + Appearance + + + {/* Live Preview — real components, scaled down & non-interactive */} + + + Preview + + + {/* Viewport window — clips the scaled content */} + + {/* Scaled container — renders at full size, scaled down to fit */} + + + {/* Real Header */} +
{}} + onNewConversation={() => {}} + chatHistory={[]} + showLabChip={uiSettings.showLabChip !== false} + showLabIcon={uiSettings.showLabIcon !== false} + appTitle={uiSettings.appTitle} + accentColor={pAccent} + isDarkBg={isDarkBg} + /> + + {/* Body: sidebar + divider + chat */} + + {/* Real ChatSidebar */} + {}} + onStop={() => {}} + recentConversations={[ + { id: "1", title: "Sales pipeline analysis Q4" }, + { id: "2", title: "Draft marketing email" }, + { id: "3", title: "K8s deployment help" }, + ]} + activeConversationId="1" + onConversationClick={() => {}} + onConversationDelete={() => {}} + onRefreshConversations={() => {}} + isLoading={false} + width={30} + selectedModel="google.gemini-2.5-pro" + accentColor={pAccent} + isDarkBg={isDarkBg} + /> + + {/* Divider */} + + + + + {/* Chat area (lightweight mock — no ChatMessage needed) */} + + + {/* User message */} + + Tell me about the latest sales numbers + + {/* Assistant response */} + + Based on the Q4 data, total revenue increased 12% compared to last quarter, reaching $2.4M across all regions. The EMEA region showed the strongest growth at 18%, while APAC maintained steady performance. + + + + + + {/* FAB */} + + + + Internal + + + + + + + + + + + {/* ── Branding ── */} + + + Branding + + + + + Application Title + + setUiSettings({ ...uiSettings, appTitle: e.target.value })} + placeholder="Enter application title..." + variant="outlined" + size="small" + fullWidth + helperText="Browser tab and page title" + /> + + + + Application Logo + + + { + setUiSettings({ ...uiSettings, appLogo: e.target.value }); + setLogoError(false); + }} + placeholder="Enter logo URL..." + variant="outlined" + size="small" + fullWidth + helperText="URL to your logo image" + /> + + {!logoError && ( + Logo preview { + if (uiSettings.appLogo) setLogoError(true); + }} + /> + )} + {logoError && ( + ! + )} + + + + + + {/* Accent Color + Dark Mode — inline row */} + + + + Accent Color + + + + setUiSettings({ ...uiSettings, accentColor: e.target.value })} + style={{ width: 36, height: 32, border: `1px solid ${isDarkBg ? "rgba(255,255,255,0.12)" : "rgba(0,0,0,0.12)"}`, borderRadius: 10, cursor: "pointer", padding: 2 }} + /> + setUiSettings({ ...uiSettings, accentColor: e.target.value })} + variant="outlined" + size="small" + sx={{ width: 120 }} + /> + + + + {/* Dark mode button */} + + setUiSettings({ ...uiSettings, darkMode: !uiSettings.darkMode })} + sx={{ + width: 36, + height: 36, + borderRadius: "10px", + border: `1px solid ${isDarkBg ? "rgba(255,255,255,0.15)" : "rgba(0,0,0,0.10)"}`, + backgroundColor: isDarkBg ? "rgba(255,255,255,0.06)" : "rgba(0,0,0,0.03)", + transition: "all 0.25s ease", + "&:hover": { + backgroundColor: isDarkBg ? "rgba(255,255,255,0.12)" : "rgba(0,0,0,0.07)", + }, + }} + > + {uiSettings.darkMode ? ( + + ) : ( + + )} + + + {uiSettings.darkMode ? "Light mode" : "Dark mode"} + + + + + + {/* Subtle divider */} + + + {/* ── Content ── */} + + + Content + + + + + Welcome Message + + setUiSettings({ ...uiSettings, welcomeMessage: e.target.value })} + placeholder="Enter welcome message..." + variant="outlined" + size="small" + fullWidth + helperText="Shown when users first load the chat" + /> + + + + Input Placeholder + + setUiSettings({ ...uiSettings, inputPlaceholder: e.target.value })} + placeholder="Enter input placeholder text..." + variant="outlined" + size="small" + fullWidth + helperText="Shown in the empty chat input field" + /> + + + + + {/* Subtle divider */} + + + {/* ── Header Elements ── */} + + + Header Elements + + + + setUiSettings({ ...uiSettings, showLabChip: e.target.checked })} + sx={{ transform: "scale(0.8)" }} + /> + + chip + + + setUiSettings({ ...uiSettings, showLabIcon: e.target.checked })} + sx={{ transform: "scale(0.8)" }} + /> + + icon next to title + + + + + + ); +} \ No newline at end of file diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/settings/MemoryTab.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/settings/MemoryTab.js new file mode 100644 index 000000000..cc928ccad --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/settings/MemoryTab.js @@ -0,0 +1,239 @@ +"use client"; + +import { Box, FormControl, Select, MenuItem as MuiMenuItem, TextField, Tooltip, Typography } from "@mui/material"; +import { motion } from "framer-motion"; +import { Database, Info, RefreshCw, Zap } from "lucide-react"; +import { useState, useEffect } from "react"; +import IOSSwitch from "../ui/IOSSwitch"; + +function generateSubjectId() { + return "user_" + crypto.randomUUID().replace(/-/g, "").slice(0, 12); +} + +const DEFAULT_AI_SETTINGS = { + ltmEnabled: false, + ltmSubjectId: "", + ltmAccessPolicy: "recall_and_store", + stmoEnabled: false, +}; + +const ACCESS_POLICY_OPTIONS = [ + { + value: "recall_and_store", + label: "Recall & Store", + description: "The AI remembers past info and saves new info from this conversation.", + }, + { + value: "recall_only", + label: "Recall Only", + description: "The AI remembers past info but won't save anything new from this conversation.", + }, + { + value: "store_only", + label: "Store Only", + description: "The AI saves new info from this conversation but can't recall past memories.", + }, +]; + +export default function MemoryTab() { + const [aiSettings, setAiSettings] = useState(DEFAULT_AI_SETTINGS); + const [isHydrated, setIsHydrated] = useState(false); + + useEffect(() => { + try { + const stored = localStorage.getItem("aiSettings"); + if (stored) { + const parsed = JSON.parse(stored); + if (!["recall_and_store", "recall_only", "store_only"].includes(parsed.ltmAccessPolicy)) { + parsed.ltmAccessPolicy = "recall_and_store"; + } + setAiSettings({ ...DEFAULT_AI_SETTINGS, ...parsed }); + } + } catch {} + setIsHydrated(true); + }, []); + + useEffect(() => { + if (isHydrated) { + localStorage.setItem("aiSettings", JSON.stringify(aiSettings)); + } + }, [aiSettings, isHydrated]); + + const updateAiSetting = (key, value) => setAiSettings(prev => ({ ...prev, [key]: value })); + + const handleLtmToggle = (enabled) => { + updateAiSetting("ltmEnabled", enabled); + if (enabled && !aiSettings.ltmSubjectId) { + updateAiSetting("ltmSubjectId", generateSubjectId()); + } + }; + + return ( + + + Memory + + + + {/* Long-Term Memory Card */} + + + + + + + + Long-Term Memory + + + handleLtmToggle(e.target.checked)} + /> + + + The AI remembers preferences, facts, and context across conversations. Must be enabled in your OCI GenAI Project. + + {aiSettings.ltmEnabled && ( + + {/* Memory ID */} + + + + Memory ID + + + + + + + + + updateAiSetting("ltmSubjectId", e.target.value)} + variant="outlined" + size="small" + fullWidth + sx={{ "& .MuiOutlinedInput-root": { fontSize: "0.82rem", fontFamily: "monospace" } }} + /> + + updateAiSetting("ltmSubjectId", generateSubjectId())} + sx={{ + p: 0.75, + borderRadius: 1, + cursor: "pointer", + color: "var(--dm-muted, rgba(0,0,0,0.35))", + "&:hover": { backgroundColor: "rgba(0,0,0,0.05)", color: "var(--dm-text, rgba(0,0,0,0.6))" }, + display: "flex", + flexShrink: 0, + }} + > + + + + + + Same ID = shared memory. Change it to start fresh. + + + + {/* Access Policy */} + + + + Access Policy + + + + + + + {ACCESS_POLICY_OPTIONS.find(o => o.value === aiSettings.ltmAccessPolicy)?.description} + + + + )} + + + {/* Short-Term Memory Optimization Card */} + + + + + + + + Short-Term Memory Optimization + + + updateAiSetting("stmoEnabled", e.target.checked)} + /> + + + Automatically summarizes chat history to save tokens in long conversations. Must be enabled in your OCI GenAI Project. + + + + + + Both features must be enabled in your OCI GenAI Project (Console → Analytics & AI → Generative AI → Projects). + + + ); +} diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/settings/ObservabilityTab.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/settings/ObservabilityTab.js new file mode 100644 index 000000000..145fbc4f7 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/settings/ObservabilityTab.js @@ -0,0 +1,209 @@ +"use client"; + +import { Box, Typography } from "@mui/material"; +import { motion } from "framer-motion"; +import { ExternalLink, Activity, BarChart3, Plug, ArrowDown, GitFork } from "lucide-react"; + +const DESTINATIONS = [ + { + icon: BarChart3, + title: "OCI LangFuse", + color: "#4C825C", + tag: "Managed", + desc: "Zero-config tracing. Every LLM call, tool invocation, and token counted automatically.", + bullets: ["Input / Output", "Token usage", "Latency", "Tool calls", "Reasoning"], + links: [], + }, + { + icon: Plug, + title: "Client BYO", + color: "#35535C", + tag: "Flexible", + desc: "Bring your own stack. We export OpenTelemetry — you choose where it lands.", + links: [ + { label: "LangFuse Cloud", url: "https://cloud.langfuse.com/" }, + { label: "Datadog", url: "https://www.datadoghq.com/" }, + { label: "Splunk", url: "https://www.splunk.com/" }, + { label: "Grafana", url: "https://grafana.com/" }, + { label: "OCI Monitoring", url: "https://cloud.oracle.com/monitoring" }, + ], + }, +]; + +export default function ObservabilityTab() { + return ( + + + Observability + + + {/* Horizontal pipeline */} + + {/* Source chip */} + + OCI Responses API + + + {/* Arrow */} + + + + + + {/* OTel chip */} + + + + OpenTelemetry + + + + {/* Fork arrow */} + + + + + + {/* Destination labels */} + + {DESTINATIONS.map((opt, i) => ( + + + + {opt.title} + + + ))} + + + + {/* Destination cards */} + + {DESTINATIONS.map((opt, i) => ( + + + {/* Card header */} + + + + + + + {opt.title} + + + + {opt.tag} + + + + {/* Description */} + + {opt.desc} + + + {/* Bullets as inline chips */} + {opt.bullets && ( + + {opt.bullets.map((b, j) => ( + + {b} + + ))} + + )} + + {/* Integration links */} + {opt.links.length > 0 && ( + + {opt.links.map((link, j) => ( + window.open(link.url, "_blank")} + sx={{ + display: "inline-flex", alignItems: "center", gap: 0.4, + px: 1, py: 0.35, borderRadius: "6px", + backgroundColor: "rgba(0,0,0,0.025)", border: "1px solid var(--dm-border, rgba(0,0,0,0.06))", + cursor: "pointer", fontSize: "0.68rem", fontWeight: 500, color: "var(--dm-muted, rgba(0,0,0,0.5))", + transition: "all 0.15s ease", + "&:hover": { + backgroundColor: `${opt.color}08`, + borderColor: `${opt.color}20`, + color: opt.color, + }, + }} + > + {link.label} + + + ))} + + )} + + + ))} + + + ); +} diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/settings/PromptsTab.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/settings/PromptsTab.js new file mode 100644 index 000000000..d57798f9d --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/settings/PromptsTab.js @@ -0,0 +1,447 @@ +"use client"; + +import { Box, FormControlLabel, Tab, Tabs, TextField, Typography } from "@mui/material"; +import { motion, AnimatePresence } from "framer-motion"; +import ReactMarkdown from "react-markdown"; +import remarkGfm from "remark-gfm"; +import IOSSwitch from "../ui/IOSSwitch"; +import { useState, useEffect } from "react"; +import { WIDGET_INLINE_PROMPT } from "../../utils/widgetInlinePrompt"; +import { WIDGET_LAYOUT_PROMPT } from "../../utils/widgetLayoutPrompt"; +import { CONCISE_SYSTEM_PROMPT } from "../../utils/concisePrompt"; +import { BASE_SYSTEM_PROMPT } from "../../utils/baseSystemPrompt"; +import { FileText, Pencil, Puzzle, Zap } from "lucide-react"; +import WidgetCarousel from "../widgets/WidgetCarousel"; + +const mdComponents = { + h1: ({ children }) => {children}, + h2: ({ children }) => {children}, + h3: ({ children }) => {children}, + p: ({ children }) => {children}, + ul: ({ children }) => {children}, + ol: ({ children }) => {children}, + strong: ({ children }) => {children}, + code: ({ children }) => {children}, +}; + +const STORAGE_KEYS = { + SYSTEM_PROMPT: 'systemPrompt', + WIDGETS_ENABLED: 'widgetsEnabled', + CONCISE_ENABLED: 'conciseEnabled', +}; + +const PREVIEW_TABS = [ + { value: 'v1', label: 'Components' }, + { value: 'v2', label: 'Layouts' }, +]; + +const DEFAULT_SYSTEM_PROMPT = 'You are a helpful AI assistant.'; + +const PROMPT_TABS = [ + { label: "Instructions", icon: }, + { label: "System", icon: }, + { label: "Widgets", icon: }, + { label: "Concise", icon: }, +]; + +export default function PromptsTab() { + const [systemPrompt, setSystemPrompt] = useState(DEFAULT_SYSTEM_PROMPT); + const [widgetsEnabled, setWidgetsEnabled] = useState(false); + const [conciseEnabled, setConciseEnabled] = useState(false); + const [previewTab, setPreviewTab] = useState('v1'); + const [isHydrated, setIsHydrated] = useState(false); + const [activeTab, setActiveTab] = useState(0); + + // Load from localStorage after mount (client-only) + useEffect(() => { + const storedSystemPrompt = localStorage.getItem(STORAGE_KEYS.SYSTEM_PROMPT); + if (storedSystemPrompt) { + setSystemPrompt(storedSystemPrompt); + } + + const storedWidgetsEnabled = localStorage.getItem(STORAGE_KEYS.WIDGETS_ENABLED); + if (storedWidgetsEnabled === 'true') { + setWidgetsEnabled(true); + } + + const storedConciseEnabled = localStorage.getItem(STORAGE_KEYS.CONCISE_ENABLED); + if (storedConciseEnabled === 'true') { + setConciseEnabled(true); + } + + setIsHydrated(true); + }, []); + + // Save system prompt to localStorage whenever it changes (after hydration) + useEffect(() => { + if (isHydrated) { + localStorage.setItem(STORAGE_KEYS.SYSTEM_PROMPT, systemPrompt); + } + }, [systemPrompt, isHydrated]); + + // Save widgets enabled to localStorage whenever it changes (after hydration) + useEffect(() => { + if (isHydrated) { + localStorage.setItem(STORAGE_KEYS.WIDGETS_ENABLED, widgetsEnabled.toString()); + } + }, [widgetsEnabled, isHydrated]); + + // Save concise enabled to localStorage whenever it changes (after hydration) + useEffect(() => { + if (isHydrated) { + localStorage.setItem(STORAGE_KEYS.CONCISE_ENABLED, conciseEnabled.toString()); + } + }, [conciseEnabled, isHydrated]); + + + return ( + + + Prompts + + + {/* Tabs — contained pill style */} + + + {PROMPT_TABS.map((tab, i) => ( + setActiveTab(i)} + sx={{ + display: "flex", + alignItems: "center", + gap: 0.75, + px: 3, + py: 1, + borderRadius: 2, + cursor: "pointer", + transition: "all 0.2s ease", + backgroundColor: activeTab === i ? "var(--dm-surface, #fff)" : "transparent", + boxShadow: activeTab === i ? "0 1px 3px rgba(0,0,0,0.1)" : "none", + color: activeTab === i ? "var(--dm-text, #1a1a1a)" : "var(--dm-muted, rgba(0,0,0,0.45))", + fontWeight: activeTab === i ? 600 : 450, + "&:hover": { + color: activeTab === i ? "var(--dm-text, #1a1a1a)" : "var(--dm-text, rgba(0,0,0,0.65))", + }, + }} + > + {tab.icon} + + {tab.label} + + + ))} + + + + {/* Tab content */} + + + {/* Instructions tab */} + {activeTab === 0 && ( + + + Custom instructions added after the base prompt to customize the AI's behavior. + + setSystemPrompt(e.target.value)} + placeholder="Add custom instructions for the AI..." + variant="outlined" + size="small" + fullWidth + multiline + rows={16} + sx={{ + "& .MuiOutlinedInput-root": { + fontSize: "0.85rem", + }, + }} + /> + + )} + + {/* System tab */} + {activeTab === 1 && ( + + + This is always sent to the AI automatically. Cannot be modified. + + + + {BASE_SYSTEM_PROMPT} + + + + )} + + {/* Widgets tab */} + {activeTab === 2 && ( + + + + + When enabled, the AI can embed interactive widgets (cards, stats, charts, forms, etc.) in responses. + + + setWidgetsEnabled(e.target.checked)} + sx={{ ml: 1 }} + /> + } + label="" + sx={{ mr: 0, ml: 2, flexShrink: 0 }} + /> + + + + {/* Preview tabs: Components / Layouts */} + setPreviewTab(v)} + centered + sx={{ + minHeight: 36, + borderBottom: "1px solid var(--dm-border, rgba(0,0,0,0.08))", + "& .MuiTabs-indicator": { + backgroundColor: "var(--dm-text, #1a1a1a)", + height: 2, + borderRadius: 1, + }, + "& .MuiTab-root": { + minHeight: 36, + textTransform: "none", + fontSize: "0.82rem", + fontWeight: 450, + color: "var(--dm-muted, rgba(0,0,0,0.45))", + padding: "6px 14px", + minWidth: "auto", + "&.Mui-selected": { + color: "var(--dm-text, #1a1a1a)", + fontWeight: 550, + }, + }, + }} + > + {PREVIEW_TABS.map((tab) => ( + + ))} + + + + + + + {/* Prompt reference */} + + + Widgets prompt — single widgets (auto-appended) + + + {WIDGET_INLINE_PROMPT} + + + + + Layouts prompt — composable layouts (auto-appended) + + + {WIDGET_LAYOUT_PROMPT} + + + + + )} + + {/* Concise Mode tab */} + {activeTab === 3 && ( + + + + + Strips filler, articles, and pleasantries while keeping full technical accuracy. Reduces token usage significantly. + + + setConciseEnabled(e.target.checked)} + sx={{ ml: 1 }} + /> + } + label="" + sx={{ mr: 0, ml: 2, flexShrink: 0 }} + /> + + + {/* Token savings metrics */} + + {[ + { label: "System prompts", reduction: "58%", example: "171 \u2192 72 tokens" }, + { label: "API docs", reduction: "42%", example: "137 \u2192 79 tokens" }, + { label: "General text", reduction: "~25%", example: "avg across content" }, + ].map((metric) => ( + + + {metric.reduction} + + + {metric.label} + + + {metric.example} + + + ))} + + + {/* Before/After example — two columns */} + + + {/* Before */} + + + Before — 69 tokens + + + "The reason your React component is re-rendering is likely because you're creating a new object reference on each render cycle. When you pass an inline object as a prop, React's shallow comparison sees it as a different object every time, which triggers a re-render. I'd recommend using useMemo to memoize the object." + + + {/* After */} + + + After — 19 tokens (72% less) + + + "New object ref each render. Inline object prop = new ref = re-render. Wrap in useMemo." + + + + + + {/* Prompt reference */} + + + Concise mode prompt (auto-appended) + + + {CONCISE_SYSTEM_PROMPT} + + + + + )} + + + + ); +} diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/settings/SettingsPage.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/settings/SettingsPage.js new file mode 100644 index 000000000..d3f87ca92 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/settings/SettingsPage.js @@ -0,0 +1,225 @@ +"use client"; + +import { ArrowLeft, Settings, Building2, Users } from "lucide-react"; +import Header from "../ui/Header"; +import { darkModeOverrides, darkCssVars, lightCssVars, DARK_BG } from "../../config/darkMode"; +import { Box, IconButton, Typography, ThemeProvider, createTheme, useTheme } from "@mui/material"; +import { motion } from "framer-motion"; +import VerticalTabs from "../ui/VerticalTabs"; +import GeneralTab from "./GeneralTab"; +import PromptsTab from "./PromptsTab"; +import ToolsTab from "./ToolsTab"; +import MemoryTab from "./MemoryTab"; +import ObservabilityTab from "./ObservabilityTab"; +import { useRouter } from "next/navigation"; +import { useState, useEffect } from "react"; +import { APP_VERSION } from "../../config/version"; +import { INTERNAL_MODELS } from "../../config/models-internal"; + +const INTERNAL_MODE_AVAILABLE = INTERNAL_MODELS.length > 0; + +const TAB_ROUTES = { + 0: '/settings/prompts', + 1: '/settings/tools', + 2: '/settings/memory', + 3: '/settings/observability', + 4: '/settings/appearance', +}; + +const ROUTE_TO_TAB = { + 'prompts': 0, + 'tools': 1, + 'memory': 2, + 'observability': 3, + 'appearance': 4, +}; + +export default function SettingsPage({ defaultTab = 'prompts' }) { + const router = useRouter(); + const [activeTab, setActiveTab] = useState(ROUTE_TO_TAB[defaultTab] ?? 0); + const [appMode, setAppMode] = useState("client"); + const [uiSettings, setUiSettings] = useState({}); + const parentTheme = useTheme(); + + useEffect(() => { + const saved = localStorage.getItem("appMode"); + if (saved === "client" || saved === "internal") setAppMode(saved); + try { + const stored = localStorage.getItem("uiSettings"); + if (stored) setUiSettings(JSON.parse(stored)); + } catch {} + + const handleUiSettingsChanged = (e) => setUiSettings(e.detail); + window.addEventListener('uiSettingsChanged', handleUiSettingsChanged); + return () => window.removeEventListener('uiSettingsChanged', handleUiSettingsChanged); + }, []); + + const darkTheme = uiSettings.darkMode ? createTheme({ + ...parentTheme, + palette: { + ...parentTheme.palette, + mode: "dark", + background: { default: DARK_BG, paper: "#242424" }, + text: { primary: "#e5e5e5", secondary: "rgba(255,255,255,0.5)" }, + divider: "rgba(255,255,255,0.08)", + }, + }) : parentTheme; + + const handleToggleAppMode = () => { + const newMode = appMode === "internal" ? "client" : "internal"; + setAppMode(newMode); + localStorage.setItem("appMode", newMode); + }; + + // Handle tab change with URL update (no navigation, just URL sync) + const handleTabChange = (newTab) => { + setActiveTab(newTab); + const route = TAB_ROUTES[newTab]; + if (route) { + window.history.replaceState(null, '', route); + } + }; + + return ( + + + {/* Main Header */} +
router.push("/")} + showLabChip={uiSettings.showLabChip !== false} + showLabIcon={uiSettings.showLabIcon !== false} + appTitle={uiSettings.appTitle} + accentColor={uiSettings.accentColor} + isDarkBg={uiSettings.darkMode === true} + minimal + /> + + + {/* Settings sub-header */} + + router.push("/")} + sx={{ + mr: 2, + color: uiSettings.darkMode ? "rgba(255,255,255,0.6)" : "rgba(0, 0, 0, 0.6)", + "&:hover": { + backgroundColor: "rgba(0, 0, 0, 0.04)", + }, + }} + > + + + + + + + Settings + + + + {/* Content with vertical tabs */} + + v{APP_VERSION} + + } + > + {activeTab === 0 && } + {activeTab === 1 && } + {activeTab === 2 && } + {activeTab === 3 && } + {activeTab === 4 && } + + + + {/* App Mode FAB */} + {INTERNAL_MODE_AVAILABLE && ( + + {appMode === "internal" ? ( + + ) : ( + + )} + + {appMode === "internal" ? "Internal" : "Client"} + + + )} + + + ); +} \ No newline at end of file diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/settings/ToolForm.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/settings/ToolForm.js new file mode 100644 index 000000000..d58175942 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/settings/ToolForm.js @@ -0,0 +1,454 @@ +"use client"; + +import { useReducer } from "react"; +import { + Box, + TextField, + Select, + MenuItem as MuiMenuItem, + FormControl, + InputLabel, + Button, + Chip, + IconButton, + InputAdornment, + CircularProgress, + Typography, + Tooltip, +} from "@mui/material"; +import { Plug, Eye, EyeOff, X, Check, Wand2, Wrench } from "lucide-react"; +import mcpService from "../../services/mcpService"; + +function makeInitial(initial) { + return { + name: initial?.name || "", + endpoint: initial?.endpoint || "", + authType: initial?.authType || "none", + authKey: initial?.authKey || "", + oauthTokenUrl: initial?.oauth?.tokenUrl || "", + oauthClientId: initial?.oauth?.clientId || "", + oauthClientSecret: initial?.oauth?.clientSecret || "", + oauthScope: initial?.oauth?.scope || "", + testStatus: null, // 'connected' | 'error' | null + testLoading: false, + testTools: null, + testError: null, + showSecret: false, + detecting: false, + detectMsg: null, + }; +} + +function reducer(state, action) { + switch (action.type) { + case "set": + return { ...state, [action.field]: action.value }; + case "patch": + return { ...state, ...action.patch }; + case "resetTest": + return { ...state, testStatus: null, testError: null, testTools: null }; + default: + return state; + } +} + +function formatTestError(err) { + const raw = err?.message || String(err) || "Unknown error"; + if (/MCP request failed:\s*401/i.test(raw)) return "Authentication failed (401). Check the auth type and credentials."; + if (/MCP request failed:\s*403/i.test(raw)) return "Forbidden (403). Credentials valid but lack permission."; + if (/MCP request failed:\s*404/i.test(raw)) return "Endpoint not found (404). Check the URL."; + if (/MCP request failed:\s*5\d\d/i.test(raw)) return `Server error: ${raw.replace(/MCP request failed:\s*/i, "")}`; + if (/Failed to fetch|NetworkError|ERR_NETWORK/i.test(raw)) return "Network error — endpoint unreachable, CORS blocked, or DNS issue."; + if (/needs_auth/i.test(raw)) return "OAuth flow required. Use authType OAuth 2.1 (interactive) for this endpoint."; + return raw.length > 240 ? raw.slice(0, 240) + "…" : raw; +} + +/** + * Unified form for adding or editing a custom MCP tool. + * + * Props: + * - mode: 'add' | 'edit' + * - initialValues: existing server (for edit) + * - onSave: (serverData, testTools) => void — receives the data to persist + * - onCancel: () => void + */ +export default function ToolForm({ mode = "add", initialValues = null, onSave, onCancel }) { + const isEdit = mode === "edit"; + const [s, d] = useReducer(reducer, initialValues, makeInitial); + + const set = (field) => (e) => { + d({ type: "set", field, value: e.target.value }); + // Any field change invalidates the previous test result + if (s.testStatus) d({ type: "resetTest" }); + }; + + const setAuthType = (e) => { + d({ type: "patch", patch: { authType: e.target.value } }); + d({ type: "resetTest" }); + }; + + // Build the server config from the current form values. + const buildServer = (id) => { + const server = { + id: id || (isEdit ? initialValues.id : "test-new"), + name: s.name.trim(), + endpoint: s.endpoint.trim(), + authType: s.authType !== "none" ? s.authType : undefined, + }; + if (s.authType === "api-key" || s.authType === "bearer") { + if (s.authKey.trim()) server.authKey = s.authKey.trim(); + } else if (s.authType === "oauth2") { + server.oauth = { + tokenUrl: s.oauthTokenUrl.trim(), + clientId: s.oauthClientId.trim(), + clientSecret: s.oauthClientSecret.trim(), + scope: s.oauthScope.trim() || undefined, + }; + } + // oauth2.1 is handled by the OAuth flow (no creds in form) + return server; + }; + + // Required-field validation for the save button + const isValid = (() => { + if (!s.endpoint.trim()) return false; + if (mode === "add" && !s.name.trim()) return false; + if (s.authType === "api-key" || s.authType === "bearer") { + if (!s.authKey.trim() && !(isEdit && initialValues?.authKey)) return false; + } + if (s.authType === "oauth2") { + if (!s.oauthTokenUrl.trim() || !s.oauthClientId.trim()) return false; + if (!s.oauthClientSecret.trim() && !(isEdit && initialValues?.oauth?.clientSecret)) return false; + } + return true; + })(); + + const handleTest = async () => { + d({ type: "patch", patch: { testLoading: true, testStatus: null, testError: null, testTools: null } }); + try { + const tools = await mcpService.listToolsFromServer(buildServer("test-" + (isEdit ? initialValues.id : "new"))); + d({ type: "patch", patch: { testLoading: false, testStatus: "connected", testTools: tools || [] } }); + return tools || []; + } catch (err) { + d({ type: "patch", patch: { testLoading: false, testStatus: "error", testError: formatTestError(err) } }); + return null; + } + }; + + const handleSave = async () => { + if (!isValid) return; + // OAuth 2.1 is interactive — the test would just trigger needs_auth. + // Save first; the user authorizes from the chat banner or explicitly. + let tools = s.testTools; + if (s.authType !== "oauth2.1" && s.testStatus !== "connected") { + tools = await handleTest(); + if (!tools) return; + } + onSave(buildServer(), tools || []); + }; + + // Auto-discovery: try /.well-known/oauth-authorization-server on the endpoint origin + const handleDetect = async () => { + if (!s.endpoint.trim()) return; + d({ type: "patch", patch: { detecting: true, detectMsg: null } }); + try { + const u = new URL(s.endpoint.trim()); + // Common locations OAuth 2.1 servers expose metadata + const candidates = [ + `${u.origin}/.well-known/oauth-authorization-server`, + `${u.origin}/.well-known/openid-configuration`, + // Some MCPs publish under their base path + `${u.origin}${u.pathname.replace(/\/?$/, "")}/.well-known/oauth-authorization-server`, + ]; + let meta = null; + for (const url of candidates) { + try { + const res = await fetch(url); + if (res.ok) { + meta = await res.json(); + break; + } + } catch { /* try next */ } + } + if (meta) { + // Authorization server found → suggest OAuth 2.1 interactive flow + d({ + type: "patch", + patch: { + authType: "oauth2.1", + oauthTokenUrl: meta.token_endpoint || s.oauthTokenUrl, + detectMsg: "OAuth 2.1 metadata detected — switched auth type to OAuth 2.1 (interactive). Click Add to register, then Authorize from the chat.", + detecting: false, + }, + }); + return; + } + d({ type: "patch", patch: { detecting: false, detectMsg: "No OAuth metadata at this URL — keep current auth type." } }); + } catch (e) { + d({ type: "patch", patch: { detecting: false, detectMsg: `Detect failed: ${e.message || e}` } }); + } + }; + + const showSecretAdornment = ( + + d({ type: "set", field: "showSecret", value: !s.showSecret })} edge="end"> + {s.showSecret ? : } + + + ); + + + return ( + + {mode === "add" && ( + + Add MCP Tool + + )} + + {mode === "add" && ( + + )} + {isEdit && ( + + )} + + + + + + {s.detecting ? : } + + + + + ), + }, + }} + /> + {s.detectMsg && ( + + {s.detectMsg} + + )} + + + + Authentication + + + + {(s.authType === "api-key" || s.authType === "bearer") && ( + + )} + + + {s.authType === "oauth2" && ( + + + + + + + + + )} + + {s.authType === "oauth2.1" && ( + + OAuth 2.1 is interactive. After saving, click Authorize from the chat banner the first time + a tool from this server is invoked. PKCE + dynamic client registration is performed automatically using the + server's discovery metadata. + + )} + + {s.testStatus === "error" && s.testError && ( + + {s.testError} + + )} + + + {s.testStatus === "connected" && ( + } + label={s.testTools ? `Connected · ${s.testTools.length} tools` : "Connected"} + size="small" + color="success" + variant="outlined" + sx={{ mr: 1 }} + /> + )} + + {s.authType !== "oauth2.1" && ( + + )} + + + + {/* Test results — list discovered tools so the user can verify */} + {s.testStatus === "connected" && s.testTools && s.testTools.length > 0 && ( + + + {s.testTools.length} function{s.testTools.length !== 1 ? "s" : ""} + + + {s.testTools.map((tool) => ( + + + + {tool.name} + {tool.description && ( + + {tool.description} + + )} + + + ))} + + + )} + + ); +} diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/settings/ToolsTab.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/settings/ToolsTab.js new file mode 100644 index 000000000..6ec086c0f --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/settings/ToolsTab.js @@ -0,0 +1,2408 @@ +"use client"; + +import { useState, useEffect, useRef } from "react"; +import { + Box, + Typography, + TextField, + Button, + IconButton, + Collapse, + CircularProgress, + Chip, + FormControl, + InputLabel, + Select, + MenuItem as MuiMenuItem, + Tabs, + Tab, + InputAdornment, + Checkbox, + Tooltip, + Dialog, + DialogTitle, + DialogContent, + DialogActions, + Snackbar, + Alert, +} from "@mui/material"; +import { motion, AnimatePresence } from "framer-motion"; +import { Plus, Trash2, ChevronDown, ChevronRight, ChevronLeft, RefreshCw, Wrench, Pencil, Check, X, Plug, Unplug, Power, Globe, Blocks, Search, FileSearch, Database, Eye, EyeOff, Upload, FileText, CloudUpload, FolderOpen, ImagePlus, ArrowLeft, Info, Send, Tag, Terminal, Zap, Sparkles, ExternalLink, KeyRound, Download } from "lucide-react"; +import IOSSwitch from "../ui/IOSSwitch"; +import mcpService, { MCPService } from "../../services/mcpService"; +import ToolForm from "./ToolForm"; +import { INTERNAL_TOOL_TABS, INTERNAL_ADDONS } from "../../config/tools-internal"; + +const NATIVE_TOOLS = [ + { + id: "native_web_search", + name: "Web Search", + description: "Search the web in real time to find up-to-date information, articles, documentation, and more. Results are summarized and cited automatically.", + icon: Search, + color: "#4285F4", + endpoint: null, + comingSoon: true, + }, + { + id: "native_rag", + name: "File Search", + description: "Retrieve relevant context from your knowledge bases and documents using vector search. Grounds AI responses in your own data for accurate, sourced answers.", + icon: FileSearch, + color: "#6B7280", + endpoint: null, + hasConfig: true, + }, + { + id: "native_code_interpreter", + name: "Code Interpreter", + description: "Run Python code in a secure sandbox with 420+ preinstalled libraries. Ideal for calculations, data analysis, chart generation, and file processing.", + icon: Terminal, + color: "#10B981", + endpoint: null, + }, + { + id: "native_text_to_sql", + name: "Text to SQL", + description: "Convert natural language questions into SQL queries and execute them against your databases. Get structured results and insights from your data instantly.", + icon: Database, + color: "#F59E0B", + endpoint: null, + hasConfig: true, + comingSoon: true, + configType: "semantic_store", + }, +]; + +const STATUS_CHIP = { + connected: { label: "Connected", bg: "rgba(16, 185, 129, 0.12)", color: "#059669" }, + error: { label: "Error", bg: "rgba(198, 40, 40, 0.12)", color: "#c62828" }, +}; + +const ADDON_TOOLS = [ + ...INTERNAL_ADDONS, + { + id: "addon_image_generation", + name: "Image Generation", + description: "Generate images from text descriptions. The AI will create images when your prompt requests visual content.", + color: "#4f46e5", + icon: ImagePlus, + isNative: true, + }, +]; + +function generateSubjectId() { + return "user_" + crypto.randomUUID().replace(/-/g, "").slice(0, 12); +} + + +const ALL_TOOLS_TABS = [ + { label: "Native", icon: , id: "native" }, + { label: "Custom", icon: , id: "custom" }, + ...INTERNAL_TOOL_TABS, +]; + +export default function ToolsTab() { + const [servers, setServers] = useState([]); + const [enabledTools, setEnabledTools] = useState([]); + const [expandedServers, setExpandedServers] = useState({}); + const [serverTools, setServerTools] = useState({}); // serverId -> tools[] + const [loadingServers, setLoadingServers] = useState({}); // serverId -> boolean + const [serverStatus, setServerStatus] = useState({}); // serverId -> 'connected' | 'error' | null + const [isHydrated, setIsHydrated] = useState(false); + + // Add/Edit form state lives entirely inside ; ToolsTab only tracks + // which form is open: showAddForm and editingServerId. + const [showAddForm, setShowAddForm] = useState(false); + const [toast, setToast] = useState(null); // { message, severity } + // OAuth 2.1 token status per server: 'authorized' | 'needs_auth' | undefined (unknown) + const [oauth21Status, setOauth21Status] = useState({}); + // Server id to scroll/highlight after navigation from a chat banner (?focus=) + const [focusedServerId, setFocusedServerId] = useState(null); + + // Native tools enabled state + const [nativeToolsEnabled, setNativeToolsEnabled] = useState({}); + const [semanticStores, setSemanticStores] = useState([]); + const [loadingSemanticStores, setLoadingSemanticStores] = useState(false); + const [selectedSemanticStoreId, setSelectedSemanticStoreId] = useState(""); + + // Edit server — only need to know which one is being edited; values live in + const [editingServerId, setEditingServerId] = useState(null); + + const [vectorStores, setVectorStores] = useState([]); + const [loadingVectorStores, setLoadingVectorStores] = useState(false); + const [selectedVectorStoreIds, setSelectedVectorStoreIds] = useState([]); + const [activeVectorStoreId, setActiveVectorStoreId] = useState(null); + const [vectorStoreFiles, setVectorStoreFiles] = useState([]); + const [loadingFiles, setLoadingFiles] = useState(false); + const [uploadingFile, setUploadingFile] = useState(false); + const [uploadError, setUploadError] = useState(null); + const [deletingFile, setDeletingFile] = useState(null); + const [allFiles, setAllFiles] = useState([]); + + // VS detail: edit dialog + const [showEditVSDialog, setShowEditVSDialog] = useState(false); + const [editVSNameValue, setEditVSNameValue] = useState(""); + const [editVSExpiresEnabled, setEditVSExpiresEnabled] = useState(false); + const [editVSExpiresDays, setEditVSExpiresDays] = useState("7"); + const [editVSMetadata, setEditVSMetadata] = useState(""); + const [savingVS, setSavingVS] = useState(false); + + // VS detail: tabs & search + const [vsDetailTab, setVsDetailTab] = useState(0); + const [searchQuery, setSearchQuery] = useState(""); + const [searchResults, setSearchResults] = useState(null); + const [searching, setSearching] = useState(false); + + // VS detail: file attributes + const [editingFileAttrs, setEditingFileAttrs] = useState(null); // file id + const [fileAttrsValue, setFileAttrsValue] = useState(""); + const [savingFileAttrs, setSavingFileAttrs] = useState(false); + + // Batch upload progress + const [uploadProgress, setUploadProgress] = useState(null); // { done, total } | null + + // File preview modal + const [previewFile, setPreviewFile] = useState(null); // { id, filename } + const [previewContent, setPreviewContent] = useState(""); + const [previewLoading, setPreviewLoading] = useState(false); + const [previewError, setPreviewError] = useState(null); + const [downloadingFile, setDownloadingFile] = useState(null); + + const handlePreviewFile = async (fileId, filename) => { + setPreviewFile({ id: fileId, filename }); + setPreviewContent(""); + setPreviewError(null); + setPreviewLoading(true); + try { + const vsParam = activeVectorStoreId ? `&vsId=${activeVectorStoreId}` : ''; + const res = await fetch(`/api/files/${fileId}/content?limit=10240${vsParam}`); + if (!res.ok) { + const err = await res.json().catch(() => ({ error: res.statusText })); + const msg = typeof err.error === 'string' ? err.error : (err.error?.message || JSON.stringify(err.error)); + throw new Error(msg || `HTTP ${res.status}`); + } + const text = await res.text(); + setPreviewContent(text); + } catch (e) { + setPreviewError(e.message); + } finally { + setPreviewLoading(false); + } + }; + + const handleDownloadFile = async (fileId, filename) => { + setDownloadingFile(fileId); + try { + const vsParam = activeVectorStoreId ? `&vsId=${activeVectorStoreId}` : ''; + const res = await fetch(`/api/files/${fileId}/content?download=1&filename=${encodeURIComponent(filename)}${vsParam}`); + if (!res.ok) throw new Error(`HTTP ${res.status}`); + const blob = await res.blob(); + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = filename; + document.body.appendChild(a); + a.click(); + a.remove(); + URL.revokeObjectURL(url); + } catch (e) { + console.error('Download failed:', e); + } finally { + setDownloadingFile(null); + } + }; + const [deletingVS, setDeletingVS] = useState(null); + const [isDragging, setIsDragging] = useState(false); + const [activeVsStatus, setActiveVsStatus] = useState(null); // 'completed' | 'in_progress' | etc + const vsPollingRef = useRef(null); + + // Add-on tools state + const [addonEnabled, setAddonEnabled] = useState({}); + const [addonLoading, setAddonLoading] = useState({}); + const [addonStatus, setAddonStatus] = useState({}); // 'connected' | 'error' | 'needs_auth' | null + const [addonTools, setAddonTools] = useState({}); + const [addonAuthUrl, setAddonAuthUrl] = useState({}); // addonId -> authorize URL + + // Sync native tools as MCP servers based on enabled state + const syncNativeServers = (enabledState) => { + const currentServers = MCPService.getServers(); + + NATIVE_TOOLS.forEach(tool => { + if (!tool.endpoint) return; // skip tools without endpoint + const exists = currentServers.find(s => s.id === tool.id); + + if (enabledState[tool.id]) { + if (!exists) { + // Register as MCP server + const newServer = { + id: tool.id, + name: tool.name, + endpoint: tool.endpoint, + enabled: true, + isNative: true, + }; + currentServers.push(newServer); + } else if (!exists.enabled) { + exists.enabled = true; + } + } else { + if (exists) { + exists.enabled = false; + } + } + }); + + MCPService.setServers(currentServers); + setServers(currentServers.filter(s => !s.isNative && !s.isAddon)); + }; + + // Sync addon tools as MCP servers based on enabled state + const syncAddonServers = (enabledState) => { + const currentServers = MCPService.getServers(); + + ADDON_TOOLS.filter(a => !a.isNative).forEach(addon => { + const exists = currentServers.find(s => s.id === addon.id); + + if (enabledState[addon.id]) { + if (!exists) { + const newServer = { + id: addon.id, + name: addon.name, + endpoint: addon.endpoint, + authType: addon.authType, + authKey: addon.authKey, + enabled: true, + isAddon: true, + }; + currentServers.push(newServer); + } else { + exists.enabled = true; + exists.name = addon.name; + exists.endpoint = addon.endpoint; + exists.authType = addon.authType; + exists.authKey = addon.authKey; + } + } else { + if (exists) { + exists.enabled = false; + } + } + }); + + MCPService.setServers(currentServers); + setServers(currentServers.filter(s => !s.isNative && !s.isAddon)); + }; + + const loadAddonTools = async (addon) => { + setAddonLoading(prev => ({ ...prev, [addon.id]: true })); + setAddonStatus(prev => ({ ...prev, [addon.id]: null })); + + try { + const serverConfig = { + id: addon.id, + endpoint: addon.endpoint, + authType: addon.authType, + authKey: addon.authKey, + }; + const tools = await mcpService.listToolsFromServer(serverConfig); + setAddonStatus(prev => ({ ...prev, [addon.id]: 'connected' })); + setAddonTools(prev => ({ ...prev, [addon.id]: tools || [] })); + + // Auto-enable all discovered tools + if (tools && tools.length > 0) { + const toolIds = tools.map(t => `${addon.id}:${t.name}`); + setEnabledTools(prev => { + const cleaned = prev.filter(t => !t.startsWith(`${addon.id}:`)); + return [...cleaned, ...toolIds]; + }); + } + } catch (error) { + console.error(`Failed to connect to addon ${addon.name}:`, error); + if (error.message === 'needs_auth' && error.authorizeUrl) { + setAddonStatus(prev => ({ ...prev, [addon.id]: 'needs_auth' })); + setAddonAuthUrl(prev => ({ ...prev, [addon.id]: error.authorizeUrl })); + } else { + setAddonStatus(prev => ({ ...prev, [addon.id]: 'error' })); + } + setAddonTools(prev => ({ ...prev, [addon.id]: [] })); + } finally { + setAddonLoading(prev => ({ ...prev, [addon.id]: false })); + } + }; + + const handleToggleAddon = (addonId, enabled) => { + const addon = ADDON_TOOLS.find(a => a.id === addonId); + + // Native addons (no MCP endpoint) — sync via nativeToolsEnabled + if (addon?.isNative) { + const nativeId = addonId.replace('addon_', 'native_'); + setNativeToolsEnabled(prev => ({ ...prev, [nativeId]: enabled })); + const newState = { ...addonEnabled, [addonId]: enabled }; + setAddonEnabled(newState); + return; + } + + const newState = { ...addonEnabled, [addonId]: enabled }; + setAddonEnabled(newState); + + if (enabled) { + syncAddonServers(newState); + if (addon) loadAddonTools(addon); + } else { + // Remove tools from enabled list and clear loading state + setEnabledTools(prev => prev.filter(t => !t.startsWith(`${addonId}:`))); + setAddonStatus(prev => ({ ...prev, [addonId]: null })); + setAddonTools(prev => ({ ...prev, [addonId]: [] })); + setAddonLoading(prev => ({ ...prev, [addonId]: false })); + syncAddonServers(newState); + } + }; + + // Load from localStorage after mount + useEffect(() => { + // Load native tools enabled state first + let nativeState = {}; + try { + const stored = localStorage.getItem('nativeToolsEnabled'); + if (stored) { + nativeState = JSON.parse(stored); + } else { + NATIVE_TOOLS.forEach(t => { nativeState[t.id] = false; }); + } + } catch { /* ignore */ } + setNativeToolsEnabled(nativeState); + setSelectedSemanticStoreId(localStorage.getItem('nl2sqlSemanticStoreId') || ''); + + try { + const savedVsIds = JSON.parse(localStorage.getItem('ragVectorStoreIds') || '[]'); + if (savedVsIds.length > 0) { + setSelectedVectorStoreIds(savedVsIds); + } + } catch { /* ignore */ } + + if (nativeState.native_rag) { + fetchVectorStores(); + } + if (nativeState.native_text_to_sql) { + fetchSemanticStores(); + } + + // Sync native tools as MCP servers + syncNativeServers(nativeState); + + // Load addon tools enabled state (default: all enabled) + let addonState = {}; + try { + const storedAddon = localStorage.getItem('addonToolsEnabled'); + if (storedAddon) { + addonState = JSON.parse(storedAddon); + } else { + ADDON_TOOLS.forEach(a => { addonState[a.id] = true; }); + } + } catch { /* ignore */ } + // Sync native addon states from nativeToolsEnabled + ADDON_TOOLS.filter(a => a.isNative).forEach(a => { + const nativeId = a.id.replace('addon_', 'native_'); + addonState[a.id] = !!nativeState[nativeId]; + }); + setAddonEnabled(addonState); + syncAddonServers(addonState); + + // Load custom (non-native, non-addon) servers + const allServers = MCPService.getServers(); + const customServers = allServers.filter(s => !s.isNative && !s.isAddon); + setServers(customServers); + setEnabledTools(MCPService.getEnabledTools()); + + setIsHydrated(true); + + // Auto-load tools from custom servers + customServers.forEach(server => { + loadServerTools(server); + }); + + // Auto-connect enabled add-ons (skip native ones) + ADDON_TOOLS.forEach(addon => { + if (addonState[addon.id] && !addon.isNative) { + loadAddonTools(addon); + } + }); + }, []); + + // Save native tools enabled state and sync MCP servers + useEffect(() => { + if (isHydrated) { + localStorage.setItem('nativeToolsEnabled', JSON.stringify(nativeToolsEnabled)); + syncNativeServers(nativeToolsEnabled); + } + }, [nativeToolsEnabled, isHydrated]); + + // Save addon tools enabled state + useEffect(() => { + if (isHydrated) { + localStorage.setItem('addonToolsEnabled', JSON.stringify(addonEnabled)); + } + }, [addonEnabled, isHydrated]); + + + const handleToggleNativeTool = (toolId, enabled) => { + setNativeToolsEnabled(prev => ({ ...prev, [toolId]: enabled })); + if (toolId === 'native_rag' && enabled) { + fetchVectorStores(); + } + if (toolId === 'native_text_to_sql' && enabled) { + fetchSemanticStores(); + } + }; + + const fetchVectorStores = async () => { + setLoadingVectorStores(true); + try { + const res = await fetch('/api/vector-stores'); + if (res.ok) { + const data = await res.json(); + let stores = data.data || []; + + // Recover stores saved in localStorage but missing from the list (eventual consistency) + const savedIds = JSON.parse(localStorage.getItem('ragVectorStoreIds') || '[]'); + const listedIds = new Set(stores.map(s => s.id)); + const missingIds = savedIds.filter(id => !listedIds.has(id)); + if (missingIds.length > 0) { + const fetched = await Promise.all( + missingIds.map(id => fetch(`/api/vector-stores?id=${id}`).then(r => r.ok ? r.json() : null).catch(() => null)) + ); + stores = [...stores, ...fetched.filter(Boolean)]; + } + + setVectorStores(stores); + + // Save valid (completed) VS IDs so genaiAgentsService can filter stale ones + const validIds = stores.filter(s => s.status === 'completed').map(s => s.id); + localStorage.setItem('ragValidVectorStoreIds', JSON.stringify(validIds)); + } else { + console.error('Failed to fetch vector stores:', res.status); + } + } catch (error) { + console.error('Failed to fetch vector stores:', error); + } finally { + setLoadingVectorStores(false); + } + }; + + const fetchSemanticStores = async () => { + setLoadingSemanticStores(true); + try { + const res = await fetch('/api/semantic-stores'); + if (res.ok) { + const data = await res.json(); + setSemanticStores(data.items || []); + } + } catch (error) { + console.error('Failed to fetch semantic stores:', error); + } finally { + setLoadingSemanticStores(false); + } + }; + + const handleSelectSemanticStore = (storeId) => { + const next = selectedSemanticStoreId === storeId ? '' : storeId; + setSelectedSemanticStoreId(next); + localStorage.setItem('nl2sqlSemanticStoreId', next); + }; + + const deleteVectorStore = async (vsId) => { + setDeletingVS(vsId); + try { + const res = await fetch(`/api/vector-stores?id=${vsId}`, { method: 'DELETE' }); + if (res.ok) { + setVectorStores(prev => prev.filter(vs => vs.id !== vsId)); + setSelectedVectorStoreIds(prev => { + const next = prev.filter(id => id !== vsId); + localStorage.setItem('ragVectorStoreIds', JSON.stringify(next)); + return next; + }); + if (activeVectorStoreId === vsId) { + setActiveVectorStoreId(null); + setVectorStoreFiles([]); + } + } + } catch (error) { + console.error('Failed to delete vector store:', error); + } finally { + setDeletingVS(null); + } + }; + + const fetchVectorStoreFiles = async (vsId) => { + setLoadingFiles(true); + try { + const [vsRes, allRes] = await Promise.all([ + fetch(`/api/vector-stores?id=${vsId}&files=1`), + fetch('/api/files'), + ]); + if (vsRes.ok) { + const data = await vsRes.json(); + setVectorStoreFiles(data.data || []); + } + if (allRes.ok) { + const allData = await allRes.json(); + setAllFiles(allData.data || []); + } + } catch (error) { + console.error('Failed to fetch vector store files:', error); + } finally { + setLoadingFiles(false); + } + }; + + const handleToggleVectorStore = (vsId) => { + setSelectedVectorStoreIds(prev => { + const next = prev.includes(vsId) ? prev.filter(id => id !== vsId) : [...prev, vsId]; + localStorage.setItem('ragVectorStoreIds', JSON.stringify(next)); + return next; + }); + }; + + const handleActivateVectorStore = (vsId) => { + setActiveVectorStoreId(vsId); + // Clear previous polling + if (vsPollingRef.current) { clearInterval(vsPollingRef.current); vsPollingRef.current = null; } + // Check current status + const vs = vectorStores.find(v => v.id === vsId); + const status = vs?.status || 'in_progress'; + setActiveVsStatus(status); + if (status === 'completed') { + fetchVectorStoreFiles(vsId); + } else { + // Poll until completed + vsPollingRef.current = setInterval(async () => { + try { + const res = await fetch(`/api/vector-stores?id=${vsId}`); + if (res.ok) { + const data = await res.json(); + setActiveVsStatus(data.status); + setVectorStores(prev => prev.map(v => v.id === vsId ? { ...v, status: data.status } : v)); + if (data.status === 'completed' || data.status === 'expired') { + clearInterval(vsPollingRef.current); + vsPollingRef.current = null; + if (data.status === 'completed') fetchVectorStoreFiles(vsId); + } + } + } catch {} + }, 3000); + } + }; + + const handleDeleteFile = async (fileId) => { + if (!activeVectorStoreId) return; + setDeletingFile(fileId); + try { + const res = await fetch(`/api/vector-stores?id=${activeVectorStoreId}&file_id=${fileId}`, { method: 'DELETE' }); + if (res.ok) { + setVectorStoreFiles(prev => prev.filter(f => f.id !== fileId)); + } + } catch (error) { + console.error('Failed to delete file:', error); + } finally { + setDeletingFile(null); + } + }; + + // Single-file upload helper (returns the OCI file_id or throws). + const uploadOneFile = async (file) => { + const formData = new FormData(); + formData.append('file', file); + formData.append('purpose', 'user_data'); + const uploadRes = await fetch('/api/files', { method: 'POST', body: formData }); + if (!uploadRes.ok) { + const errText = await uploadRes.text().catch(() => ''); + let msg = `Upload failed (${uploadRes.status})`; + try { + const parsed = JSON.parse(errText); + const inner = typeof parsed?.error === 'string' ? (() => { try { return JSON.parse(parsed.error); } catch { return null; } })() : null; + msg = inner?.message || parsed?.error?.message || parsed?.message || msg; + } catch { /* not JSON */ } + throw new Error(msg); + } + const uploaded = await uploadRes.json(); + return uploaded.id; + }; + + // Upload N files: parallelizes uploads in chunks of 10 to avoid rate limits, + // then attaches them all to the vector store via the batch endpoint. + const handleUploadFiles = async (filesArr) => { + const files = Array.from(filesArr || []).filter(Boolean); + if (files.length === 0 || !activeVectorStoreId) return; + if (activeVsStatus !== 'completed') { + setUploadError('Vector store is still provisioning. Please wait.'); + return; + } + + setUploadingFile(true); + setUploadError(null); + setUploadProgress({ done: 0, total: files.length }); + + const CHUNK_SIZE = 10; + const fileIds = []; + const failures = []; + try { + for (let i = 0; i < files.length; i += CHUNK_SIZE) { + const chunk = files.slice(i, i + CHUNK_SIZE); + const results = await Promise.allSettled(chunk.map(f => uploadOneFile(f))); + results.forEach((r, idx) => { + if (r.status === 'fulfilled') fileIds.push(r.value); + else failures.push({ name: chunk[idx]?.name || '?', error: r.reason?.message || 'Upload failed' }); + }); + setUploadProgress({ done: Math.min(i + chunk.length, files.length), total: files.length }); + } + + if (fileIds.length > 0) { + // Single file → use attach-file (cheaper). Multiple → use batch endpoint. + const path = fileIds.length === 1 + ? `/api/vector-stores?id=${activeVectorStoreId}&action=attach-file` + : `/api/vector-stores?id=${activeVectorStoreId}&action=attach-batch`; + const body = fileIds.length === 1 ? { file_id: fileIds[0] } : { file_ids: fileIds }; + const attachRes = await fetch(path, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(body), + }); + if (!attachRes.ok) { + setUploadError(`Failed to attach file${fileIds.length === 1 ? '' : 's'} (${attachRes.status})`); + return; + } + } + + if (failures.length > 0) { + setUploadError(`${failures.length} of ${files.length} failed: ${failures.slice(0, 3).map(f => f.name).join(', ')}${failures.length > 3 ? '…' : ''}`); + } + + fetchVectorStoreFiles(activeVectorStoreId); + } catch (error) { + console.error('Batch upload failed:', error); + setUploadError(error.message || 'Upload failed'); + } finally { + setUploadingFile(false); + setUploadProgress(null); + } + }; + + // Backwards-compat wrapper — existing callers still pass a single file. + const handleUploadFile = (file) => handleUploadFiles([file]); + + const openEditVSDialog = () => { + const vs = vectorStores.find(v => v.id === activeVectorStoreId); + if (!vs) return; + setEditVSNameValue(vs.name || ''); + setEditVSExpiresEnabled(!!vs.expires_after); + setEditVSExpiresDays(vs.expires_after?.days?.toString() || '7'); + setEditVSMetadata(vs.metadata ? JSON.stringify(vs.metadata, null, 2) : ''); + setShowEditVSDialog(true); + }; + + const handleUpdateVS = async () => { + if (!activeVectorStoreId) return; + setSavingVS(true); + try { + const body = {}; + if (editVSNameValue.trim()) body.name = editVSNameValue.trim(); + if (editVSExpiresEnabled && parseInt(editVSExpiresDays) > 0) { + body.expires_after = { anchor: "last_active_at", days: parseInt(editVSExpiresDays) }; + } else if (!editVSExpiresEnabled) { + body.expires_after = null; + } + if (editVSMetadata.trim()) { + try { body.metadata = JSON.parse(editVSMetadata); } catch { /* ignore */ } + } else { + body.metadata = {}; + } + const res = await fetch(`/api/vector-stores?id=${activeVectorStoreId}`, { + method: 'PUT', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(body), + }); + if (res.ok) { + const updated = await res.json(); + setVectorStores(prev => prev.map(vs => vs.id === activeVectorStoreId ? { ...vs, ...updated } : vs)); + setShowEditVSDialog(false); + } + } catch (e) { + console.error('Failed to update VS:', e); + } finally { + setSavingVS(false); + } + }; + + const handleSearchVS = async () => { + if (!searchQuery.trim() || !activeVectorStoreId) return; + setSearching(true); + setSearchResults(null); + try { + const res = await fetch(`/api/vector-stores?id=${activeVectorStoreId}&action=search`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ query: searchQuery.trim(), max_num_results: 5 }), + }); + if (res.ok) { + const data = await res.json(); + setSearchResults(data.data || []); + } + } catch (e) { + console.error('Search failed:', e); + } finally { + setSearching(false); + } + }; + + const handleUpdateFileAttrs = async (fileId) => { + if (!activeVectorStoreId) return; + setSavingFileAttrs(true); + try { + let attrs = {}; + try { attrs = JSON.parse(fileAttrsValue); } catch { /* ignore parse error */ } + const res = await fetch(`/api/vector-stores?id=${activeVectorStoreId}&file_id=${fileId}`, { + method: 'PUT', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ attributes: attrs }), + }); + if (res.ok) { + setEditingFileAttrs(null); + fetchVectorStoreFiles(activeVectorStoreId); + } + } catch (e) { + console.error('Failed to update file attrs:', e); + } finally { + setSavingFileAttrs(false); + } + }; + + const handleDeleteFileGlobal = async (fileId) => { + try { + await fetch(`/api/files?id=${fileId}`, { method: 'DELETE' }); + } catch (e) { + console.error('Failed to delete file globally:', e); + } + }; + + // Save servers when changed (merge with native + addon servers) + useEffect(() => { + if (isHydrated) { + const allStored = MCPService.getServers(); + const nativeServers = allStored.filter(s => s.isNative); + const addonServers = allStored.filter(s => s.isAddon); + MCPService.setServers([...nativeServers, ...addonServers, ...servers]); + } + }, [servers, isHydrated]); + + // Check OAuth 2.1 token presence for each oauth2.1 server + useEffect(() => { + const checkOauth21Tokens = async () => { + const oauth21Servers = servers.filter(s => s.authType === 'oauth2.1'); + if (oauth21Servers.length === 0) return; + const updates = {}; + await Promise.all( + oauth21Servers.map(async (s) => { + try { + const res = await fetch(`/api/mcp/oauth/token?endpoint=${encodeURIComponent(s.endpoint)}`); + const data = await res.json().catch(() => ({})); + updates[s.id] = data.hasToken ? 'authorized' : 'needs_auth'; + } catch { + updates[s.id] = 'needs_auth'; + } + }) + ); + setOauth21Status(prev => ({ ...prev, ...updates })); + }; + if (isHydrated) checkOauth21Tokens(); + }, [servers, isHydrated]); + + // Show feedback when returning from an OAuth callback (success or error) + useEffect(() => { + if (typeof window === 'undefined') return; + const params = new URLSearchParams(window.location.search); + const result = params.get('mcp_auth'); + if (result === 'success') { + setToast({ message: 'Tool authorized successfully', severity: 'success' }); + } else if (result === 'error') { + setToast({ message: 'Authorization failed. Try again or check the tool configuration.', severity: 'error' }); + } + if (result) { + // Clean the URL so a refresh doesn't re-trigger the toast + params.delete('mcp_auth'); + const newUrl = window.location.pathname + (params.toString() ? `?${params.toString()}` : '') + window.location.hash; + window.history.replaceState({}, '', newUrl); + } + }, []); + + // Honor ?focus= coming from the chat banner. Expand + scroll + highlight + // the failing server so the user sees it immediately on landing. + useEffect(() => { + if (typeof window === 'undefined') return; + if (!isHydrated || servers.length === 0) return; + const params = new URLSearchParams(window.location.search); + const focus = params.get('focus'); + if (!focus) return; + const target = servers.find(s => s.id === focus); + if (!target) return; + setExpandedServers(prev => ({ ...prev, [focus]: true })); + setFocusedServerId(focus); + // Strip ?focus from URL so a refresh doesn't re-trigger + params.delete('focus'); + const newUrl = window.location.pathname + (params.toString() ? `?${params.toString()}` : '') + window.location.hash; + window.history.replaceState({}, '', newUrl); + // Scroll to the server card and clear the highlight after a few seconds + setTimeout(() => { + const el = document.getElementById(`mcp-server-${focus}`); + if (el) el.scrollIntoView({ behavior: 'smooth', block: 'center' }); + }, 100); + setTimeout(() => setFocusedServerId(null), 4000); + }, [isHydrated, servers]); + + // Save enabled tools when changed + useEffect(() => { + if (isHydrated) { + MCPService.setEnabledTools(enabledTools); + // Dispatch custom event so ArchitectureDiagram can update + window.dispatchEvent(new CustomEvent("mcp-tools-changed")); + } + }, [enabledTools, isHydrated]); + + // Receives the validated server data + tools (when the form already tested) from + const handleAddServer = (serverData, testTools) => { + const newServer = MCPService.addServer({ ...serverData, enabled: true }); + + // Transfer MCP session from the form's test id to the real server id + const testStateId = `test-${newServer.id}` in (mcpService.servers && Object.fromEntries(mcpService.servers)) + ? `test-${newServer.id}` + : 'test-new'; + const testState = mcpService.servers.get(testStateId); + if (testState) { + mcpService.servers.set(newServer.id, { ...testState, config: newServer }); + mcpService.servers.delete(testStateId); + } + + setServers(prev => [...prev, newServer]); + setShowAddForm(false); + setExpandedServers(prev => ({ ...prev, [newServer.id]: true })); + + const hasTestTools = Array.isArray(testTools) && testTools.length > 0; + if (hasTestTools) { + const tools = testTools.map(t => ({ ...t, serverId: newServer.id, serverName: newServer.name })); + setServerTools(prev => ({ ...prev, [newServer.id]: tools })); + setServerStatus(prev => ({ ...prev, [newServer.id]: 'connected' })); + const toolIds = tools.map(t => `${newServer.id}:${t.name}`); + setEnabledTools(prev => [...prev, ...toolIds]); + setToast({ message: `${newServer.name} added · ${tools.length} tools enabled`, severity: 'success' }); + } else if (newServer.authType === 'oauth2.1') { + // Interactive flow — kick off authorization right away. The user comes back to /settings + // when done. After return, the server's tools/list will succeed and the chip will load. + setServerStatus(prev => ({ ...prev, [newServer.id]: null })); + const returnTo = typeof window !== 'undefined' ? window.location.pathname + window.location.search : '/settings'; + window.location.href = `/api/mcp/oauth/authorize?endpoint=${encodeURIComponent(newServer.endpoint)}&returnTo=${encodeURIComponent(returnTo)}`; + } else { + loadServerTools(newServer); + } + }; + + const handleRemoveServer = (serverId) => { + MCPService.removeServer(serverId); + setServers(servers.filter(s => s.id !== serverId)); + + // Remove tools from this server from enabled list + const newEnabledTools = enabledTools.filter(t => !t.startsWith(`${serverId}:`)); + setEnabledTools(newEnabledTools); + }; + + const handleToggleServer = (serverId, enabled) => { + MCPService.updateServer(serverId, { enabled }); + setServers(servers.map(s => s.id === serverId ? { ...s, enabled } : s)); + }; + + const handleStartEdit = (server) => setEditingServerId(server.id); + const handleCancelEdit = () => setEditingServerId(null); + + // Called by when the user clicks Save + const handleSaveEdit = (serverData) => { + const id = serverData.id || editingServerId; + const updates = { + name: serverData.name, + endpoint: serverData.endpoint, + authType: serverData.authType, + authKey: serverData.authKey, + oauth: serverData.oauth, + }; + MCPService.updateServer(id, updates); + setServers(prev => prev.map(s => (s.id === id ? { ...s, ...updates } : s))); + setEditingServerId(null); + setToast({ message: `${updates.name} updated`, severity: 'success' }); + }; + + // Test connection and update tools list + const testServerConnection = async (server) => { + setLoadingServers(prev => ({ ...prev, [server.id]: true })); + setServerStatus(prev => ({ ...prev, [server.id]: null })); + + try { + const tools = await mcpService.listToolsFromServer(server); + setServerStatus(prev => ({ ...prev, [server.id]: 'connected' })); + if (tools) { + setServerTools(prev => ({ ...prev, [server.id]: tools })); + // Auto-enable new tools + const validToolIds = tools.map(t => `${server.id}:${t.name}`); + setEnabledTools(prev => { + const cleaned = prev.filter(t => !t.startsWith(`${server.id}:`) || validToolIds.includes(t)); + const toAdd = validToolIds.filter(id => !cleaned.includes(id)); + return toAdd.length > 0 ? [...cleaned, ...toAdd] : cleaned; + }); + } + } catch (error) { + setServerStatus(prev => ({ ...prev, [server.id]: 'error' })); + } finally { + setLoadingServers(prev => ({ ...prev, [server.id]: false })); + } + }; + + const handleTestConnection = async (server) => { + await testServerConnection(server); + }; + + + const loadServerTools = async (server) => { + setLoadingServers(prev => ({ ...prev, [server.id]: true })); + setServerStatus(prev => ({ ...prev, [server.id]: null })); + + try { + const tools = await mcpService.listToolsFromServer(server); + setServerTools(prev => ({ ...prev, [server.id]: tools })); + setServerStatus(prev => ({ ...prev, [server.id]: 'connected' })); + + // Clean up enabledTools: remove tools that no longer exist, add new ones + const validToolIds = tools ? tools.map(t => `${server.id}:${t.name}`) : []; + + setEnabledTools(prev => { + // Remove tools from this server that no longer exist + const cleaned = prev.filter(t => { + if (!t.startsWith(`${server.id}:`)) return true; // keep tools from other servers + return validToolIds.includes(t); // only keep if still exists + }); + + // Auto-enable new tools (if not already enabled) + const toAdd = validToolIds.filter(id => !cleaned.includes(id)); + return toAdd.length > 0 ? [...cleaned, ...toAdd] : cleaned; + }); + } catch (error) { + console.error(`Failed to load tools from ${server.name}:`, error); + setServerStatus(prev => ({ ...prev, [server.id]: 'error' })); + setServerTools(prev => ({ ...prev, [server.id]: [] })); + } finally { + setLoadingServers(prev => ({ ...prev, [server.id]: false })); + } + }; + + const handleToggleExpand = (serverId) => { + const isExpanding = !expandedServers[serverId]; + setExpandedServers({ ...expandedServers, [serverId]: isExpanding }); + + // Load tools if expanding and not loaded yet + const server = servers.find(s => s.id === serverId); + if (isExpanding && server && !serverTools[serverId]) { + loadServerTools(server); + } + }; + + const handleToggleTool = (serverId, toolName, enabled) => { + const toolId = `${serverId}:${toolName}`; + let newEnabledTools; + + if (enabled) { + newEnabledTools = [...enabledTools, toolId]; + } else { + newEnabledTools = enabledTools.filter(t => t !== toolId); + } + + setEnabledTools(newEnabledTools); + }; + + const isToolEnabled = (serverId, toolName) => { + return enabledTools.includes(`${serverId}:${toolName}`); + }; + + const [toolsTab, setToolsTab] = useState(0); + + const TOOLS_TABS = ALL_TOOLS_TABS; + + // Map tab index to tab id for content rendering + const activeTabId = TOOLS_TABS[toolsTab]?.id || "native"; + + return ( + + + Tools + + + {/* Tabs — contained pill style */} + + + {TOOLS_TABS.map((tab, i) => ( + setToolsTab(i)} + sx={{ + display: "flex", + alignItems: "center", + gap: 0.75, + px: 3, + py: 1, + borderRadius: 2, + cursor: "pointer", + transition: "all 0.2s ease", + backgroundColor: toolsTab === i ? "var(--dm-surface, #fff)" : "transparent", + boxShadow: toolsTab === i ? "0 1px 3px rgba(0,0,0,0.1)" : "none", + color: toolsTab === i ? "var(--dm-text, #1a1a1a)" : "var(--dm-muted, rgba(0,0,0,0.45))", + fontWeight: toolsTab === i ? 600 : 450, + "&:hover": { + color: toolsTab === i ? "var(--dm-text, #1a1a1a)" : "var(--dm-text, rgba(0,0,0,0.65))", + }, + }} + > + {tab.icon} + + {tab.label} + + + ))} + + + + {/* Tab content */} + + + + {/* Native Tools tab */} + {activeTabId === "native" && ( + + + Built-in tools available to the AI out of the box. + + + {NATIVE_TOOLS.map((tool) => { + const Icon = tool.icon; + return ( + + + {/* Switch top-right — absolute */} + + {tool.comingSoon && ( + + )} + handleToggleNativeTool(tool.id, e.target.checked)} + disabled={!!tool.comingSoon} + sx={{ transform: "scale(0.75)" }} + /> + + + {/* Icon */} + + + + + {/* Content */} + + + {tool.name} + + + {tool.description} + + + + + + + {/* Semantic Store config for Text to SQL */} + {tool.configType === 'semantic_store' && nativeToolsEnabled[tool.id] && ( + + + + + + Semantic Stores + + + + + + + {loadingSemanticStores ? ( + + + + Loading semantic stores... + + + ) : semanticStores.length > 0 ? ( + + {semanticStores.map((ss) => { + const isSelected = selectedSemanticStoreId === ss.id; + const schemas = (ss.schemas?.schemas || []).map(s => s.name).join(', '); + return ( + handleSelectSemanticStore(ss.id)} + sx={{ + display: "flex", + alignItems: "center", + gap: 1, + py: 0.75, + px: 1, + borderRadius: 2, + cursor: "pointer", + transition: "all 0.15s ease", + backgroundColor: isSelected ? "rgba(245, 158, 11, 0.06)" : "transparent", + "&:hover": { backgroundColor: isSelected ? "rgba(245, 158, 11, 0.1)" : "var(--dm-subtle, rgba(0,0,0,0.03))" }, + }} + > + e.stopPropagation()} + onChange={() => handleSelectSemanticStore(ss.id)} + sx={{ + p: 0.5, + color: "var(--dm-muted, rgba(0,0,0,0.25))", + "&.Mui-checked": { color: "#F59E0B" }, + }} + /> + + + + + {ss.displayName} + + + + {schemas && ( + + Schema: {schemas} + + )} + + + ); + })} + + ) : ( + + No semantic stores found. Create one in OCI Console → Generative AI → Vector Stores (Structured data). + + )} + + + + )} + + {tool.hasConfig && tool.configType !== 'semantic_store' && nativeToolsEnabled[tool.id] && ( + + + + + {/* Detail view — single vector store */} + {activeVectorStoreId ? ( + + + { if (vsPollingRef.current) { clearInterval(vsPollingRef.current); vsPollingRef.current = null; } setActiveVectorStoreId(null); setActiveVsStatus(null); setVectorStoreFiles([]); setSearchResults(null); setSearchQuery(""); setEditingFileAttrs(null); setVsDetailTab(0); }} + sx={{ p: 0.5 }} + > + + + + + {vectorStores.find(v => v.id === activeVectorStoreId)?.name} + + {activeVsStatus && activeVsStatus !== 'completed' && ( + } + label={activeVsStatus === 'expired' ? "Expired" : "Provisioning"} + sx={{ + height: 22, fontSize: "0.65rem", + backgroundColor: activeVsStatus === 'expired' ? "rgba(239,68,68,0.08)" : "var(--dm-subtle, rgba(0,0,0,0.06))", + color: activeVsStatus === 'expired' ? "#DC2626" : "var(--dm-muted, rgba(0,0,0,0.5))", + }} + /> + )} + + + + handleToggleVectorStore(activeVectorStoreId)} + title="Use in RAG queries" + sx={{ p: 0.5, color: "var(--dm-muted, rgba(0,0,0,0.25))", "&.Mui-checked": { color: "var(--dm-text, #1a1a1a)" } }} + /> + + + {/* Edit VS Dialog */} + setShowEditVSDialog(false)} + maxWidth="xs" + fullWidth + PaperProps={{ sx: { borderRadius: 1.5 } }} + > + Edit Vector Store + + setEditVSNameValue(e.target.value)} + label="Name" + size="small" + fullWidth + autoFocus + sx={{ "& .MuiOutlinedInput-root": { fontSize: "0.85rem" } }} + /> + + + setEditVSExpiresEnabled(e.target.checked)} + sx={{ p: 0.25, color: "var(--dm-muted, rgba(0,0,0,0.25))", "&.Mui-checked": { color: "var(--dm-text, #1a1a1a)" } }} + /> + Auto-expire + + + + {editVSExpiresEnabled && ( + setEditVSExpiresDays(e.target.value.replace(/\D/g, ''))} + size="small" + InputProps={{ endAdornment: days }} + sx={{ width: 110, "& .MuiOutlinedInput-root": { fontSize: "0.82rem" } }} + /> + )} + + + setEditVSMetadata(e.target.value)} + label="Metadata (JSON)" + size="small" + fullWidth + multiline + minRows={2} + maxRows={4} + placeholder='{"key": "value"}' + sx={{ "& .MuiOutlinedInput-root": { fontSize: "0.8rem", fontFamily: "monospace" } }} + /> + + + + + + + + {/* File Preview Dialog */} + setPreviewFile(null)} + maxWidth="md" + fullWidth + PaperProps={{ sx: { borderRadius: 1.5, maxHeight: "80vh" } }} + > + + + + {previewFile?.filename} + + previewFile && handleDownloadFile(previewFile.id, previewFile.filename)} + disabled={downloadingFile === previewFile?.id} + sx={{ p: 0.5 }} + > + {downloadingFile === previewFile?.id ? : } + + setPreviewFile(null)} sx={{ p: 0.5 }}> + + + + + {previewLoading ? ( + + + Loading... + + ) : previewError ? ( + + Failed to load preview + {previewError} + + ) : ( + + + + {previewContent} + + + + Showing first {(previewContent.length / 1024).toFixed(1)} KB · download for full file + + + )} + + + + {/* Tabs: Documents | Search */} + setVsDetailTab(v)} + sx={{ + minHeight: 0, + mb: 1.5, + "& .MuiTabs-indicator": { height: 2, borderRadius: 1 }, + "& .MuiTab-root": { minHeight: 0, py: 0.75, px: 1.5, fontSize: "0.75rem", textTransform: "none", minWidth: 0 }, + }} + > + 0 ? `Documents (${vectorStoreFiles.length})` : "Documents"} /> + + + + {/* Tab: Documents */} + {vsDetailTab === 0 && ( + + {(() => { + const vsReady = activeVsStatus === 'completed'; + const disabled = !vsReady || uploadingFile; + const hasFiles = vectorStoreFiles.length > 0; + return ( + { if (!disabled) { e.preventDefault(); e.stopPropagation(); setIsDragging(true); } }} + onDragLeave={(e) => { e.preventDefault(); e.stopPropagation(); setIsDragging(false); }} + onDrop={(e) => { + e.preventDefault(); + e.stopPropagation(); + setIsDragging(false); + if (disabled) return; + const files = Array.from(e.dataTransfer.files || []); + if (files.length > 0) handleUploadFiles(files); + }} + sx={{ + position: "relative", + borderRadius: 2.5, + border: isDragging ? "2px dashed var(--dm-text, #1a1a1a)" : "2px dashed var(--dm-border, rgba(0,0,0,0.12))", + backgroundColor: isDragging ? "var(--dm-subtle, rgba(26, 26, 26, 0.04))" : disabled ? "var(--dm-subtle, rgba(0,0,0,0.02))" : "transparent", + opacity: vsReady ? 1 : 0.5, + transition: "all 0.2s ease", + overflow: "hidden", + "&:hover": !disabled && !hasFiles ? { borderColor: "rgba(26, 26, 26, 0.3)", backgroundColor: "rgba(26, 26, 26, 0.02)" } : {}, + }} + > + {/* File list inside the drop zone */} + {loadingFiles ? ( + + + Loading... + + ) : hasFiles ? ( + + {vectorStoreFiles.map((f) => { + const fileInfo = allFiles.find(af => af.id === f.id); + const displayName = fileInfo?.filename || f.id; + const hasAttrs = f.attributes && Object.keys(f.attributes).length > 0; + return ( + + handlePreviewFile(f.id, displayName)} + sx={{ + display: "flex", alignItems: "center", gap: 0.75, py: 0.6, px: 0.75, borderRadius: 1.5, + cursor: "pointer", + "&:hover": { backgroundColor: "var(--dm-subtle, rgba(0,0,0,0.02))" }, "&:hover .file-actions": { opacity: 0.5 }, + transition: "background-color 0.15s ease", + }} + > + + + + {displayName} + + {(f.status || hasAttrs || fileInfo?.bytes) && ( + + {f.status && ( + + )} + {fileInfo?.bytes && ( + + {fileInfo.bytes < 1024 ? `${fileInfo.bytes} B` : fileInfo.bytes < 1024 * 1024 ? `${(fileInfo.bytes / 1024).toFixed(0)} KB` : `${(fileInfo.bytes / 1024 / 1024).toFixed(1)} MB`} + + )} + {hasAttrs && ( + + {Object.entries(f.attributes).map(([k, v]) => `${k}: ${v}`).join(', ')} + + )} + + )} + + { e.stopPropagation(); handleDownloadFile(f.id, displayName); }} + disabled={downloadingFile === f.id} + sx={{ opacity: 0, p: 0.25, "&:hover": { opacity: 1 }, transition: "opacity 0.15s ease" }} + > + {downloadingFile === f.id ? : } + + { e.stopPropagation(); setEditingFileAttrs(editingFileAttrs === f.id ? null : f.id); setFileAttrsValue(f.attributes ? JSON.stringify(f.attributes, null, 2) : '{}'); }} + sx={{ opacity: 0, p: 0.25, transition: "opacity 0.15s ease" }} + > + + + { e.stopPropagation(); handleDeleteFile(f.id); handleDeleteFileGlobal(f.id); }} + disabled={deletingFile === f.id} + sx={{ opacity: 0, p: 0.25, "&:hover": { opacity: 1, color: "#d32f2f" }, transition: "opacity 0.15s ease" }} + > + {deletingFile === f.id ? : } + + + {editingFileAttrs === f.id && ( + + setFileAttrsValue(e.target.value)} size="small" multiline minRows={1} maxRows={3} + placeholder='{"category": "docs"}' sx={{ flex: 1, "& .MuiOutlinedInput-root": { fontSize: "0.7rem", fontFamily: "monospace" } }} + /> + handleUpdateFileAttrs(f.id)} disabled={savingFileAttrs} sx={{ p: 0.25, mt: 0.5 }}> + {savingFileAttrs ? : } + + + )} + + ); + })} + + ) : ( + /* Empty state: full-area click-to-upload */ + + {uploadingFile ? ( + + ) : ( + + )} + + {activeVsStatus === 'expired' ? "Vector store expired" : !vsReady ? "Provisioning..." : uploadingFile ? (uploadProgress ? `Uploading ${uploadProgress.done}/${uploadProgress.total}...` : "Uploading...") : isDragging ? "Drop files here" : "Drag & drop or click to upload"} + + + PDF, TXT, MD, JSON, HTML + + { const files = Array.from(e.target.files || []); if (files.length > 0) { handleUploadFiles(files); e.target.value = ''; } }} + /> + + )} + + {/* When files exist: compact "add more" footer that stays a click target + drop hint */} + {hasFiles && ( + + {uploadingFile ? ( + <> + + + {uploadProgress ? `Uploading ${uploadProgress.done}/${uploadProgress.total}...` : "Uploading..."} + + + ) : ( + <> + + + {isDragging ? "Drop to add" : "Drag & drop or click to add more"} + + + )} + { const files = Array.from(e.target.files || []); if (files.length > 0) { handleUploadFiles(files); e.target.value = ''; } }} + /> + + )} + + ); + })()} + {uploadError && ( + {uploadError} + )} + + )} + + {/* Tab: Search */} + {vsDetailTab === 1 && ( + + + setSearchQuery(e.target.value)} + placeholder="Test a search query..." + size="small" + fullWidth + onKeyDown={(e) => { if (e.key === 'Enter') handleSearchVS(); }} + sx={{ "& .MuiOutlinedInput-root": { fontSize: "0.82rem" } }} + /> + + {searching ? : } + + + {searchResults === null && !searching && ( + + Search your vector store to test that documents are indexed correctly. + + )} + {searchResults && searchResults.length === 0 && ( + No results found. + )} + {searchResults && searchResults.length > 0 && ( + + {searchResults.map((r, i) => ( + + + + + + {r.filename || r.file_id} + + + 0.8 ? "rgba(34,197,94,0.1)" : r.score > 0.5 ? "rgba(234,179,8,0.1)" : "var(--dm-subtle, rgba(0,0,0,0.05))", color: r.score > 0.8 ? "#16a34a" : r.score > 0.5 ? "#ca8a04" : "var(--dm-muted, rgba(0,0,0,0.5))" }} /> + + + {r.content?.[0]?.text || 'No content'} + + + ))} + + )} + + )} + + ) : ( + /* List view — all vector stores */ + + + + + Vector Stores + + + + + + + + + + + + + + + {loadingVectorStores ? ( + + + + Loading vector stores... + + + ) : vectorStores.length > 0 ? ( + + {vectorStores.map((vs) => { + const isChecked = selectedVectorStoreIds.includes(vs.id); + return ( + handleActivateVectorStore(vs.id)} + sx={{ + display: "flex", + alignItems: "center", + gap: 1, + py: 0.75, + px: 1, + borderRadius: 2, + cursor: "pointer", + transition: "all 0.15s ease", + "&:hover": { + backgroundColor: "var(--dm-subtle, rgba(0,0,0,0.03))", + }, + "&:hover .vs-delete": { opacity: 0.5 }, + "&:hover .vs-chevron": { opacity: 1 }, + }} + > + e.stopPropagation()} + onChange={() => handleToggleVectorStore(vs.id)} + sx={{ + p: 0.5, + color: "var(--dm-muted, rgba(0,0,0,0.25))", + "&.Mui-checked": { color: "var(--dm-text, #1a1a1a)" }, + }} + /> + + + + {vs.name} + + + + + {vs.file_counts?.total || 0} files · {vs.usage_bytes ? `${(vs.usage_bytes / 1024).toFixed(0)} KB` : '0 KB'} + + + + { + e.stopPropagation(); + deleteVectorStore(vs.id); + }} + disabled={deletingVS === vs.id} + sx={{ + opacity: 0, + "&:hover": { opacity: 1, color: "#d32f2f" }, + transition: "opacity 0.15s ease", + }} + > + {deletingVS === vs.id ? : } + + + + ); + })} + + ) : ( + + No vector stores found. Create one to get started. + + )} + + )} + + + + )} + + ); + })} + + + + )} + + {/* Internal Marketplace tab — gated on INTERNAL_TOOL_TABS (populated only on private branch) */} + {INTERNAL_TOOL_TABS.length > 0 && activeTabId === "internal" && ( + + + Pre-configured tools ready to activate with a single toggle. + + + {ADDON_TOOLS.map((addon) => { + const isEnabled = !!addonEnabled[addon.id]; + const isLoading = !!addonLoading[addon.id]; + const status = addonStatus[addon.id]; + const tools = addonTools[addon.id] || []; + const Icon = addon.icon; + const Logo = addon.LogoComponent; + + const statusChip = isEnabled && STATUS_CHIP[status]; + + return ( + + + handleToggleAddon(addon.id, e.target.checked)} + sx={{ transform: "scale(0.75)" }} + /> + + + + + {Logo ? ( + + ) : ( + + )} + + + + + + {addon.name} + + {statusChip && ( + + )} + + + {addon.description} + + + + + {isLoading && ( + + + + Connecting... + + + )} + + {isEnabled && status === 'needs_auth' && !isLoading && ( + + + + )} + + {isEnabled && status === 'error' && !isLoading && ( + + + + )} + + {isEnabled && status === 'connected' && tools.length > 0 && ( + + + {tools.map((tool) => ( + } + label={tool.name} + size="small" + sx={{ + height: 26, + fontSize: "0.72rem", + fontWeight: 500, + backgroundColor: "var(--dm-subtle, rgba(0,0,0,0.03))", + border: "1px solid var(--dm-border, rgba(0,0,0,0.08))", + color: "var(--dm-text, #1a1a1a)", + "& .MuiChip-icon": { color: addon.color, ml: 0.5 }, + }} + /> + ))} + + + )} + + ); + })} + + + )} + + {/* Custom Tools tab */} + {activeTabId === "custom" && ( + + + + Connect MCP tools to extend AI capabilities. + + + + + {/* Add Tool Form — single component handles state, validation, test, OAuth discovery */} + {showAddForm && ( + + { + setShowAddForm(false); + mcpService.servers.delete('test-new'); + }} + /> + + )} + + {/* Server List */} + + {servers.map((server) => ( + + {/* Server Header */} + {editingServerId === server.id ? ( + /* Edit Mode — same form as add, prefilled with server values */ + + + + ) : ( + /* View Mode */ + handleToggleExpand(server.id)} + > + e.stopPropagation()} sx={{ flexShrink: 0, display: 'flex', alignItems: 'center' }}> + handleToggleServer(server.id, e.target.checked)} + sx={{ transform: 'scale(0.75)' }} + /> + + + + {server.name} + + {server.endpoint} + + + + {/* Actions — never shrink */} + + {/* Tools count - show when collapsed and tools are loaded */} + {!expandedServers[server.id] && serverTools[server.id]?.length > 0 && ( + + {enabledTools.filter(t => t.startsWith(`${server.id}:`)).length}/{serverTools[server.id].length} tools + + )} + + {serverStatus[server.id] === 'connected' && ( + } + label="Connected" + size="small" + sx={{ height: 24, backgroundColor: "rgba(46, 125, 50, 0.1)", color: "#2e7d32", "& .MuiChip-icon": { fontSize: 14, ml: 0.5, color: "#2e7d32" } }} + /> + )} + {serverStatus[server.id] === 'error' && ( + } + label="Unable to connect" + size="small" + sx={{ height: 24, backgroundColor: "rgba(198, 40, 40, 0.1)", color: "#c62828", "& .MuiChip-icon": { fontSize: 14, ml: 0.5, color: "#c62828" } }} + /> + )} + {/* OAuth 2.1 authorization status — only shown for oauth2.1 servers */} + {server.authType === 'oauth2.1' && oauth21Status[server.id] === 'needs_auth' && ( + + )} + {server.authType === 'oauth2.1' && oauth21Status[server.id] === 'authorized' && ( + + { + e.stopPropagation(); + const returnTo = window.location.pathname + window.location.search; + window.location.href = `/api/mcp/oauth/authorize?endpoint=${encodeURIComponent(server.endpoint)}&returnTo=${encodeURIComponent(returnTo)}`; + }} + sx={{ color: "rgba(46, 125, 50, 0.7)" }} + > + + + + )} + {loadingServers[server.id] && ( + + )} + + { + e.stopPropagation(); + handleStartEdit(server); + }} + title="Edit tool" + > + + + + { + e.stopPropagation(); + loadServerTools(server); + }} + title="Refresh tools" + > + + + + { + e.stopPropagation(); + handleRemoveServer(server.id); + }} + title="Remove tool" + sx={{ color: "error.main" }} + > + + + + {expandedServers[server.id] ? ( + + ) : ( + + )} + + + )} + + {/* Tools List (Expanded) */} + + + {loadingServers[server.id] ? ( + + + + Loading tools... + + + ) : serverTools[server.id]?.length > 0 ? ( + + {serverTools[server.id].map((tool) => ( + + handleToggleTool(server.id, tool.name, e.target.checked)} + sx={{ + p: 0.5, + mt: 0.25, + color: "var(--dm-muted, rgba(0,0,0,0.3))", + "&.Mui-checked": { color: "var(--dm-text, #1a1a1a)" }, + }} + /> + + + {tool.name} + + + {tool.description} + + + + ))} + + ) : serverStatus[server.id] === 'error' ? ( + + Unable to connect. Please verify the endpoint URL is correct. + + ) : ( + + No tools available + + )} + + + + ))} + + {servers.length === 0 && !showAddForm && ( + + + No MCP tools configured + Add a tool to extend AI capabilities + + )} + + + )} + + + + + {/* Feedback for save/update operations */} + setToast(null)} + anchorOrigin={{ vertical: 'bottom', horizontal: 'center' }} + > + {toast ? ( + setToast(null)} + variant="filled" + sx={{ fontSize: '0.85rem' }} + > + {toast.message} + + ) : null} + + + ); +} diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/settings/flows/ChipEditor.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/settings/flows/ChipEditor.js new file mode 100644 index 000000000..ee020ac04 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/settings/flows/ChipEditor.js @@ -0,0 +1,73 @@ +"use client"; + +import { Box, TextField, ToggleButton, ToggleButtonGroup, IconButton } from "@mui/material"; +import { Plus } from "lucide-react"; + +export default function ChipEditor({ + chipData, + onChipDataChange, + onSave, + showSaveButton = true, + autoFocus = false +}) { + const handleChange = (field, value) => { + onChipDataChange({ ...chipData, [field]: value }); + }; + + return ( + + + handleChange("label", e.target.value)} + label="Label" + placeholder="What appears in the chip" + variant="outlined" + size="small" + sx={{ flex: 1 }} + autoFocus={autoFocus} + /> + { + if (newStatus) handleChange("status", newStatus); + }} + size="small" + > + Info + Warning + Success + + + handleChange("content", e.target.value)} + label="Content" + placeholder="Detailed explanation that shows when clicked..." + variant="outlined" + size="small" + fullWidth + multiline + rows={3} + sx={{ mb: 2 }} + /> + {showSaveButton && ( + + + + + + )} + + ); +} \ No newline at end of file diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/settings/flows/InteractiveEditor.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/settings/flows/InteractiveEditor.js new file mode 100644 index 000000000..424619d95 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/settings/flows/InteractiveEditor.js @@ -0,0 +1,105 @@ +"use client"; + +import { Box, TextField, Typography, Button, IconButton } from "@mui/material"; +import { Plus, Trash2 } from "lucide-react"; + +export default function InteractiveEditor({ + interactiveData, + onInteractiveDataChange, + onSave, + showSaveButton = true, + autoFocus = false +}) { + const handleTitleChange = (title) => { + onInteractiveDataChange({ ...interactiveData, title }); + }; + + const handleOptionChange = (index, field, value) => { + const newOptions = [...(interactiveData.options || [])]; + newOptions[index] = { ...newOptions[index], [field]: value }; + onInteractiveDataChange({ ...interactiveData, options: newOptions }); + }; + + const handleAddOption = () => { + const newOptions = [...(interactiveData.options || []), { label: '' }]; + onInteractiveDataChange({ ...interactiveData, options: newOptions }); + }; + + const handleDeleteOption = (index) => { + const newOptions = interactiveData.options.filter((_, i) => i !== index); + onInteractiveDataChange({ ...interactiveData, options: newOptions }); + }; + + return ( + + handleTitleChange(e.target.value)} + label="Title (optional)" + placeholder="Question or instruction for users..." + variant="outlined" + size="small" + fullWidth + sx={{ mb: 2 }} + autoFocus={autoFocus} + /> + + User Options: + + + {(interactiveData.options || []).map((option, optIndex) => ( + + + handleOptionChange(optIndex, "label", e.target.value)} + variant="outlined" + size="small" + label="Button text" + placeholder="What the user will click..." + fullWidth + /> + handleDeleteOption(optIndex)} + sx={{ color: "rgba(0, 0, 0, 0.4)" }} + > + + + + + ))} + + + {showSaveButton && ( + + + + + + )} + + ); +} \ No newline at end of file diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/settings/flows/TextEditor.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/settings/flows/TextEditor.js new file mode 100644 index 000000000..7b5b05938 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/settings/flows/TextEditor.js @@ -0,0 +1,44 @@ +"use client"; + +import { Box, TextField, IconButton } from "@mui/material"; +import { Plus } from "lucide-react"; + +export default function TextEditor({ + content, + onContentChange, + onSave, + showSaveButton = true, + autoFocus = false +}) { + return ( + + onContentChange(e.target.value)} + placeholder="Message content..." + variant="outlined" + size="small" + fullWidth + multiline + rows={2} + autoFocus={autoFocus} + /> + {showSaveButton && ( + + + + )} + + ); +} \ No newline at end of file diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/AnalogClock.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/AnalogClock.js new file mode 100644 index 000000000..7261ec598 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/AnalogClock.js @@ -0,0 +1,279 @@ +import { useEffect, useState } from "react"; + +const AnalogClock = ({ size = 60, status = "idle" }) => { + const [time, setTime] = useState(null); + const [animated, setAnimated] = useState(false); + + const [processingRotation, setProcessingRotation] = useState({ + hour: 0, + minute: 0, + }); + + useEffect(() => { + setTime(new Date()); + + const animationTimer = setTimeout(() => { + setAnimated(true); + }, 50); + + const timer = setInterval(() => { + setTime(new Date()); + }, 1000); + + return () => { + clearTimeout(animationTimer); + clearInterval(timer); + }; + }, []); + + useEffect(() => { + if (status === "processing") { + const interval = setInterval(() => { + setProcessingRotation((prev) => ({ + hour: prev.hour + 1, + minute: prev.minute + 3, + })); + }, 50); + return () => clearInterval(interval); + } else { + setProcessingRotation({ hour: 0, minute: 0 }); + } + }, [status]); + + const getStatusColor = () => { + switch (status) { + case "idle": + return "#000000"; + case "processing": + return "rgb(59, 130, 246)"; + case "success": + return "rgb(34, 197, 94)"; + case "error": + return "rgb(239, 68, 68)"; + default: + return "#000000"; + } + }; + + const getGlowColor = () => { + switch (status) { + case "idle": + return "rgba(0, 0, 0, 0.1)"; + case "processing": + return "rgba(59, 130, 246, 0.5)"; + case "success": + return "rgba(34, 197, 94, 0.5)"; + case "error": + return "rgba(239, 68, 68, 0.5)"; + default: + return "rgba(0, 0, 0, 0.1)"; + } + }; + + const center = size / 2; + const radius = size / 2 - 4; + const hourHandWidth = Math.max(1.5, size / 120); + const minuteHandWidth = Math.max(1.2, size / 120); + + let hourAngle = 0; + let minuteAngle = 0; + + if (time) { + const hours = time.getHours() % 12; + const minutes = time.getMinutes(); + const seconds = time.getSeconds(); + + if (status === "error") { + const shake = Math.sin(seconds * 10) * 5; + hourAngle = hours * 30 + minutes * 0.5 + shake; + minuteAngle = minutes * 6 + shake; + } else { + hourAngle = hours * 30 + minutes * 0.5; + minuteAngle = minutes * 6; + } + + if (status === "processing") { + hourAngle += processingRotation.hour; + minuteAngle += processingRotation.minute; + } + + // Always apply modulo to prevent multiple rotations when transitioning + hourAngle = hourAngle % 360; + minuteAngle = minuteAngle % 360; + } + + const currentColor = getStatusColor(); + const glowColor = getGlowColor(); + + return ( +
+ + + + + + + + + + + {(status === "idle" || status === "processing") && ( + <> + {status !== "processing" && ( + + )} + + + + )} + + {status === "success" && ( + + + + )} + + {status === "error" && ( + + + + + )} + + + +
+ ); +}; + +export default AnalogClock; diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/BlinkingEye.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/BlinkingEye.js new file mode 100644 index 000000000..3c93947bb --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/BlinkingEye.js @@ -0,0 +1,303 @@ +import { Box } from "@mui/material"; +import { AnimatePresence, motion } from "framer-motion"; +import { useCallback, useEffect, useRef, useState } from "react"; + +export default function BlinkingEye({ + isActive = false, + blinkIntervals = [2500, 300, 15000, 20000, 8000, 25000, 12000, 30000, 18000], + lookDirection = "center", + initialOpenDelay = 900, + followMouse = false, + size = 1, +}) { + const [isOpen, setIsOpen] = useState(false); + const [hasOpenedOnce, setHasOpenedOnce] = useState(false); + const [currentIntervalIndex, setCurrentIntervalIndex] = useState(0); + const [mouseOffset, setMouseOffset] = useState({ x: 0, y: 0 }); + const svgRef = useRef(null); + + const handleMouseMove = useCallback((e) => { + if (!svgRef.current) return; + const rect = svgRef.current.getBoundingClientRect(); + const centerX = rect.left + rect.width / 2; + const centerY = rect.top + rect.height / 2; + const dx = e.clientX - centerX; + const dy = e.clientY - centerY; + const dist = Math.sqrt(dx * dx + dy * dy); + const maxOffset = 12; + const factor = Math.min(dist / 200, 1) * maxOffset; + setMouseOffset({ + x: (dx / (dist || 1)) * factor, + y: (dy / (dist || 1)) * factor, + }); + }, []); + + useEffect(() => { + if (followMouse) { + window.addEventListener("mousemove", handleMouseMove); + return () => window.removeEventListener("mousemove", handleMouseMove); + } + }, [followMouse, handleMouseMove]); + + const getPupilPosition = () => { + if (followMouse) { + return { x: 60 + mouseOffset.x, y: 40 + mouseOffset.y }; + } + switch (lookDirection) { + case "up": + return { x: 60, y: 32 }; + case "down": + return { x: 60, y: 45 }; + case "left": + return { x: 48, y: 40 }; + case "right": + return { x: 72, y: 40 }; + default: + return { x: 60, y: 40 }; + } + }; + + const getIrisTransform = () => { + if (followMouse) return "scale(1, 1)"; + switch (lookDirection) { + case "down": + return "scale(1, 0.92)"; + case "up": + return "scale(1, 0.96)"; + default: + return "scale(1, 1)"; + } + }; + + const getReflectionPosition = () => { + const pupil = getPupilPosition(); + if (followMouse) { + return { x: pupil.x + 4, y: pupil.y - 4 }; + } + switch (lookDirection) { + case "down": + return { x: pupil.x + 3, y: pupil.y - 6 }; + case "up": + return { x: pupil.x + 4, y: pupil.y - 2 }; + default: + return { x: pupil.x + 4, y: pupil.y - 4 }; + } + }; + + const getReflectionOpacity = () => { + if (followMouse) return 0.8; + switch (lookDirection) { + case "down": + return 0.6; + case "up": + return 0.9; + default: + return 0.8; + } + }; + + // useEffect 1: Solo para la apertura inicial + useEffect(() => { + if (!isActive && !hasOpenedOnce) { + const timeout = setTimeout(() => { + setIsOpen(true); + setHasOpenedOnce(true); + }, initialOpenDelay); + + return () => clearTimeout(timeout); + } + }, [isActive, hasOpenedOnce, initialOpenDelay]); + + // useEffect 2: Solo para el ciclo de parpadeo + useEffect(() => { + if (!isActive && hasOpenedOnce) { + // Esperar el intervalo actual antes de parpadear + const blinkTimeout = setTimeout(() => { + // Cerrar el ojo + setIsOpen(false); + + // Reabrir después de 150ms + setTimeout(() => { + setIsOpen(true); + // Avanzar al siguiente intervalo + setCurrentIntervalIndex((prev) => (prev + 1) % blinkIntervals.length); + }, 150); + }, blinkIntervals[currentIntervalIndex]); + + return () => clearTimeout(blinkTimeout); + } + }, [isActive, hasOpenedOnce, currentIntervalIndex, blinkIntervals]); + + const pupilPos = getPupilPosition(); + const reflectionPos = getReflectionPosition(); + const irisTransform = getIrisTransform(); + const reflectionOpacity = getReflectionOpacity(); + + return ( + + + + + + + + + + + + + + {isOpen && ( + + + + + + + + + + )} + + + + + + ); +} diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/BubbleModelSelector.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/BubbleModelSelector.js new file mode 100644 index 000000000..6331cf92a --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/BubbleModelSelector.js @@ -0,0 +1,376 @@ +"use client"; + +import { Box, Typography, Popover, Chip } from "@mui/material"; +import { motion, AnimatePresence } from "framer-motion"; +import { useState } from "react"; +import { Lock } from "lucide-react"; +import { Icon } from "@iconify/react"; + +const PROVIDER_META = { + openai: { label: "OpenAI", color: "#1a1a1a", bg: "#f5f5f5", icon: "simple-icons:openai" }, + xai: { label: "xAI", color: "#1a1a1a", bg: "#f5f5f5", icon: "simple-icons:x" }, + google: { label: "Google", color: "#1a1a1a", bg: "#f5f5f5", icon: "simple-icons:google" }, + cohere: { label: "Cohere", color: "#1a1a1a", bg: "#f5f5f5", icon: "simple-icons:cohere" }, + meta: { label: "Meta", color: "#1a1a1a", bg: "#f5f5f5", icon: "simple-icons:meta" }, +}; + +const RECOMMENDED = "google.gemini-2.5-pro"; + +// Uniform color per level — visually distinct from each other +const LEVEL_COLORS = { + family: "#6366f1", // indigo for all Level 2 (family) bubbles + version: "#ec4899", // pink for all Level 3 (version) bubbles +}; + +const SELECTED_COLOR = "#C74634"; // Oracle red — used for selection state across all levels + +// Internal use only = all OpenAI models EXCEPT gpt-oss +function isInternalOnly(model) { + const name = model.replace(/^[a-z]+\./, ""); + return model.startsWith("openai.") && !name.startsWith("gpt-oss"); +} + +function formatModelName(model) { + return model.replace(/^[a-z]+\./, ""); +} + +// Extract model family from a full model id (without provider prefix) +// Each point release is its own family: +// "gpt-5-mini" → "gpt-5", "gpt-5.1-codex" → "gpt-5.1", "gpt-5.2-pro" → "gpt-5.2" +// "gpt-4o-mini" → "gpt-4o", "gpt-4.1" → "gpt-4.1" +// "grok-3-mini-fast" → "grok-3", "grok-4-1-fast-reasoning" → "grok-4-1" +// "o1" → "o-series", "o3-mini" → "o-series", "o4-mini" → "o-series" +function getFamily(modelName) { + // o-series: o1, o3-mini, o4-mini → "o-series" + if (/^o\d/.test(modelName)) return "o-series"; + // gpt-oss special case + if (modelName.startsWith("gpt-oss")) return "gpt-oss"; + // gpt-X.Y (e.g. gpt-5.1, gpt-5.2, gpt-4.1) → family "gpt-X.Y" + const gptDotMatch = modelName.match(/^(gpt-\d+\.\d+)/); + if (gptDotMatch) return gptDotMatch[1]; + // gpt-Xo (e.g. gpt-4o, gpt-4o-mini) → family "gpt-4o" + const gptOMatch = modelName.match(/^(gpt-\d+o)/); + if (gptOMatch) return gptOMatch[1]; + // gpt-X (e.g. gpt-5, gpt-5-mini) → family "gpt-X" + const gptMatch = modelName.match(/^(gpt-\d+)/); + if (gptMatch) return gptMatch[1]; + // grok-X-Y (e.g. grok-4-1-fast-reasoning) → family "grok-X-Y" where Y is a single digit + const grokSubMatch = modelName.match(/^(grok-\d+-\d+)/); + if (grokSubMatch) return grokSubMatch[1]; + // grok-X (e.g. grok-3, grok-4) → family "grok-X" + const grokMatch = modelName.match(/^(grok-\d+)/); + if (grokMatch) return grokMatch[1]; + // fallback + return modelName; +} + +function formatFamilyLabel(family) { + if (family === "o-series") return "o-series"; + if (family === "gpt-oss") return "OSS"; + // gpt-5.1 → "GPT-5.1", gpt-4o → "GPT-4o", grok-4-1 → "Grok 4.1" + if (family.startsWith("gpt-")) return "GPT-" + family.slice(4); + if (family.startsWith("grok-")) { + const ver = family.slice(5).replace("-", "."); + return "Grok " + ver; + } + return family; +} + +export default function BubbleModelSelector({ + models = [], + selectedModel, + onModelChange, + anchorEl, + open, + onClose, + accentColor = "#C74634", +}) { + const [activeProvider, setActiveProvider] = useState(null); + const [activeFamily, setActiveFamily] = useState(null); + + // Level 1: group by provider + const providerGroups = {}; + models.forEach((model) => { + const provider = model.split(".")[0]; + if (!providerGroups[provider]) providerGroups[provider] = []; + providerGroups[provider].push(model); + }); + + // Level 2: within a provider, group by family + const getFamilyGroups = (provider) => { + const familyGroups = {}; + (providerGroups[provider] || []).forEach((model) => { + const name = model.replace(/^[a-z]+\./, ""); + const family = getFamily(name); + if (!familyGroups[family]) familyGroups[family] = []; + familyGroups[family].push(model); + }); + return familyGroups; + }; + + const providers = Object.keys(providerGroups); + const selectedProvider = selectedModel?.split(".")[0]; + const selectedName = selectedModel?.replace(/^[a-z]+\./, ""); + const selectedFamily = selectedName ? getFamily(selectedName) : null; + + const handleProviderClick = (provider) => { + if (activeProvider === provider) { + setActiveProvider(null); + setActiveFamily(null); + } else { + setActiveProvider(provider); + setActiveFamily(null); + } + }; + + const handleFamilyClick = (family, familyModels) => { + // If only one model in family, select it directly + if (familyModels.length === 1) { + onModelChange(familyModels[0]); + setActiveProvider(null); + setActiveFamily(null); + onClose(); + return; + } + setActiveFamily((prev) => (prev === family ? null : family)); + }; + + const handleModelClick = (model) => { + onModelChange(model); + setActiveProvider(null); + setActiveFamily(null); + onClose(); + }; + + const bubbleStyle = (isActive, isSelected, meta, size = "large") => { + const large = size === "large"; + const sel = accentColor; + // Priority: selected (red) > active (outline) > default (level color) + const bw = large ? 2 : 1.5; + let bg, fg, borderColor, shadow; + if (isSelected) { + bg = sel; + fg = "white"; + borderColor = sel; + shadow = `0 2px 8px ${sel}40`; + } else if (isActive) { + bg = "white"; + fg = meta.color; + borderColor = meta.color; + shadow = `0 4px 16px ${meta.color}25`; + } else { + bg = "rgba(255,255,255,0.95)"; + fg = large ? meta.color : "rgba(0,0,0,0.7)"; + borderColor = large ? "rgba(255,255,255,0.8)" : "rgba(0,0,0,0.1)"; + shadow = large ? "0 2px 8px rgba(0,0,0,0.1)" : "0 1px 4px rgba(0,0,0,0.08)"; + } + return { + display: "flex", + alignItems: "center", + gap: large ? 0.75 : 0.5, + px: large ? 2.5 : 1.5, + py: large ? 1.2 : 0.7, + borderRadius: 10, + cursor: "pointer", + bgcolor: bg, + color: fg, + border: `${bw}px solid ${borderColor}`, + boxShadow: shadow, + transition: "all 0.2s ease", + "&:hover": { + bgcolor: isSelected ? sel : "white", + border: `${bw}px solid ${sel}`, + boxShadow: `0 4px 16px ${sel}30`, + transform: "translateY(-1px)", + }, + userSelect: "none", + }; + }; + + return ( + { + setActiveProvider(null); + setActiveFamily(null); + onClose(); + }} + anchorOrigin={{ vertical: "bottom", horizontal: "center" }} + transformOrigin={{ vertical: "top", horizontal: "center" }} + marginThreshold={0} + disableScrollLock + slotProps={{ + paper: { + sx: { + mt: 1.5, + borderRadius: 4, + bgcolor: "transparent", + boxShadow: "none", + overflow: "visible", + }, + }, + }} + > + + {/* Level 1: Provider bubbles */} + + {providers.map((provider, i) => { + const meta = PROVIDER_META[provider] || { label: provider, color: "#666", bg: "#f5f5f5" }; + const isActive = activeProvider === provider; + const isSelected = selectedProvider === provider; + + return ( + + handleProviderClick(provider)} sx={bubbleStyle(isActive, isSelected, meta, "large")}> + {meta.icon && } + + {meta.label} + + + + ); + })} + + + {/* Level 2: Family bubbles */} + + {activeProvider && ( + + + {Object.entries(getFamilyGroups(activeProvider)).map(([family, familyModels], i) => { + const familyMeta = { color: LEVEL_COLORS.family }; + const isActive = activeFamily === family; + const isSelected = selectedProvider === activeProvider && selectedFamily === family; + + return ( + + handleFamilyClick(family, familyModels)} + sx={bubbleStyle(isActive, isSelected, familyMeta, "medium")} + > + + {formatFamilyLabel(family)} + {familyModels.length > 1 && ( + + {familyModels.length} + + )} + + + + ); + })} + + + )} + + + {/* Level 3: Version bubbles */} + + {activeFamily && activeProvider && ( + + + {(getFamilyGroups(activeProvider)[activeFamily] || []).map((model, i) => { + const isSelected = selectedModel === model; + const meta = { color: LEVEL_COLORS.version }; + + return ( + + handleModelClick(model)} + sx={bubbleStyle(false, isSelected, meta, "small")} + > + + {formatModelName(model)} + + {isInternalOnly(model) && ( + + + internal + + )} + {model === RECOMMENDED && ( + + )} + + + ); + })} + + + )} + + + + ); +} diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/CitationCard.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/CitationCard.js new file mode 100644 index 000000000..684b4f788 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/CitationCard.js @@ -0,0 +1,132 @@ +"use client"; + +import { ExitToApp as ExitToAppIcon } from "@mui/icons-material"; +import { + Box, + Button, + Link, + Paper, + Typography, + useTheme, +} from "@mui/material"; +import { useState } from "react"; + +export default function CitationCard({ citation, index }) { + const theme = useTheme(); + const [isExpanded, setIsExpanded] = useState(false); + const maxChars = 250; + const shouldTruncate = citation.sourceText?.length > maxChars; + + return ( + + + + {citation.title || `Source ${index + 1}`} + + {citation.pageNumbers && citation.pageNumbers.length > 0 && ( + + Pages: {citation.pageNumbers.join(", ")} + + )} + + + + + {isExpanded + ? citation.sourceText + : citation.sourceText?.slice(0, maxChars)} + {!isExpanded && shouldTruncate && "..."} + + + {shouldTruncate && ( + + )} + + + {citation.sourceLocation?.url && ( + + + + View Full Document + + + )} + + ); +} \ No newline at end of file diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/CollapsibleChip.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/CollapsibleChip.js new file mode 100644 index 000000000..822c29fa6 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/CollapsibleChip.js @@ -0,0 +1,91 @@ +"use client"; + +import { Chip, CircularProgress } from "@mui/material"; +import { motion, AnimatePresence } from "framer-motion"; +import { useState, useEffect } from "react"; + +const CollapsibleChip = ({ + processingIcon, + completedIcon, + label, + isCompleted, + completionDelay = 1000 +}) => { + const [isCollapsed, setIsCollapsed] = useState(false); + + useEffect(() => { + if (isCompleted) { + const timer = setTimeout(() => { + setIsCollapsed(true); + }, completionDelay); + return () => clearTimeout(timer); + } + }, [isCompleted, completionDelay]); + + const chipStyles = { + height: 'auto', + fontSize: '0.85em !important', + cursor: 'pointer', + overflow: 'hidden', + '& .MuiChip-icon': { + fontSize: '0.85em !important' + }, + '& .MuiChip-label': { + fontSize: '0.85em !important', + display: 'flex', + alignItems: 'center', + gap: 0.5, + whiteSpace: 'nowrap' + } + }; + + const currentIcon = isCompleted + ? completedIcon + : ; + + return ( + + + + {label} + + } + color={isCompleted ? "success" : "default"} + variant="outlined" + sx={chipStyles} + /> + + + ); +}; + +export default CollapsibleChip; \ No newline at end of file diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/DotMatrixLoader.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/DotMatrixLoader.js new file mode 100644 index 000000000..011fcb283 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/DotMatrixLoader.js @@ -0,0 +1,184 @@ +"use client"; + +import { useState, useEffect } from "react"; +import { Box } from "@mui/material"; +import { motion } from "framer-motion"; + +const animationSpeed = 3000; // Two-phase color cycle + +const grayColor = "#d0d0d0"; + +function getOffDotColor() { + if (typeof window === "undefined") return "#ffffff"; + try { + const settings = JSON.parse(localStorage.getItem("uiSettings") || "{}"); + return settings.darkMode ? "#3a3a3a" : "#ffffff"; + } catch { return "#ffffff"; } +} + +function lightenColor(hex, amount = 0.4) { + const r = parseInt(hex.slice(1, 3), 16); + const g = parseInt(hex.slice(3, 5), 16); + const b = parseInt(hex.slice(5, 7), 16); + const lr = Math.round(r + (255 - r) * amount); + const lg = Math.round(g + (255 - g) * amount); + const lb = Math.round(b + (255 - b) * amount); + return `#${lr.toString(16).padStart(2, '0')}${lg.toString(16).padStart(2, '0')}${lb.toString(16).padStart(2, '0')}`; +} + +function getAccentColor() { + try { + const settings = JSON.parse(localStorage.getItem("uiSettings") || "{}"); + return settings.accentColor || "#C74634"; + } catch { return "#C74634"; } +} + +export default function DotMatrixLoader({ size = "medium", delay = 400, alwaysShow = false, color }) { + const accentColor = color || getAccentColor(); + const lightAccentColor = lightenColor(accentColor, 0.4); + const offDotColor = getOffDotColor(); + const [show, setShow] = useState(alwaysShow); + + useEffect(() => { + if (alwaysShow) return; + const timer = setTimeout(() => setShow(true), delay); + return () => clearTimeout(timer); + }, [delay, alwaysShow]); + + // Size presets + const sizes = { + small: { dot: 6, radius: 1.5, gap: 1 }, + medium: { dot: 8, radius: 2, gap: 1.5 }, + large: { dot: 12, radius: 3, gap: 2 }, + }; + + const s = sizes[size] || sizes.medium; + + // Grid positions (1-indexed): + // 1 2 3 + // 4 5 6 + // 7 8 9 + // + // Animation: Clockwise rotation on cross (2→6→8→4), center (5) always on + // Corners (1,3,7,9) stay off + const keyframes = ` + @keyframes dot-1-spinner { + 0%, 100% { + background-color: ${offDotColor}; + } + } + + @keyframes dot-2-spinner { + 0% { background-color: ${accentColor}; } + 12% { background-color: ${lightAccentColor}; } + 24%, 34%, 44% { background-color: ${offDotColor}; } + 50% { background-color: ${grayColor}; } + 74%, 84%, 94% { background-color: ${offDotColor}; } + 97% { background-color: ${lightAccentColor}; } + 100% { background-color: ${accentColor}; } + } + + @keyframes dot-3-spinner { + 0%, 100% { + background-color: ${offDotColor}; + } + } + + @keyframes dot-4-spinner { + 0%, 10%, 20% { background-color: ${offDotColor}; } + 23% { background-color: ${lightAccentColor}; } + 26% { background-color: ${accentColor}; } + 32% { background-color: ${lightAccentColor}; } + 45%, 50%, 60%, 70% { background-color: ${offDotColor}; } + 76% { background-color: ${grayColor}; } + 95%, 100% { background-color: ${offDotColor}; } + } + + @keyframes dot-5-spinner { + 0% { background-color: ${accentColor}; } + 12% { background-color: ${lightAccentColor}; } + 25% { background-color: ${accentColor}; } + 37% { background-color: ${lightAccentColor}; } + 50%, 75% { background-color: ${grayColor}; } + 88% { background-color: ${lightAccentColor}; } + 100% { background-color: ${accentColor}; } + } + + @keyframes dot-6-spinner { + 0% { background-color: ${offDotColor}; } + 3% { background-color: ${lightAccentColor}; } + 6% { background-color: ${accentColor}; } + 15% { background-color: ${lightAccentColor}; } + 30%, 40%, 50% { background-color: ${offDotColor}; } + 56% { background-color: ${grayColor}; } + 80%, 90%, 100% { background-color: ${offDotColor}; } + } + + @keyframes dot-7-spinner { + 0%, 100% { + background-color: ${offDotColor}; + } + } + + @keyframes dot-8-spinner { + 0%, 10% { background-color: ${offDotColor}; } + 13% { background-color: ${lightAccentColor}; } + 16% { background-color: ${accentColor}; } + 25% { background-color: ${lightAccentColor}; } + 40%, 50%, 60% { background-color: ${offDotColor}; } + 66% { background-color: ${grayColor}; } + 90%, 100% { background-color: ${offDotColor}; } + } + + @keyframes dot-9-spinner { + 0%, 100% { + background-color: ${offDotColor}; + } + } + `; + + if (!show) return null; + + return ( + <> + + + div": { + width: s.dot, + height: s.dot, + backgroundColor: offDotColor, + borderRadius: `${s.radius}px`, + animationDuration: `${animationSpeed}ms`, + animationIterationCount: "infinite", + animationTimingFunction: "ease-in-out", + }, + "& > div:nth-of-type(1)": { animationName: "dot-1-spinner" }, + "& > div:nth-of-type(2)": { animationName: "dot-2-spinner" }, + "& > div:nth-of-type(3)": { animationName: "dot-3-spinner" }, + "& > div:nth-of-type(4)": { animationName: "dot-4-spinner" }, + "& > div:nth-of-type(5)": { animationName: "dot-5-spinner" }, + "& > div:nth-of-type(6)": { animationName: "dot-6-spinner" }, + "& > div:nth-of-type(7)": { animationName: "dot-7-spinner" }, + "& > div:nth-of-type(8)": { animationName: "dot-8-spinner" }, + "& > div:nth-of-type(9)": { animationName: "dot-9-spinner" }, + }} + > + {Array.from({ length: 9 }, (_, i) => ( +
+ ))} + + + + ); +} diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/DustReveal.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/DustReveal.js new file mode 100644 index 000000000..ee93e7e86 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/DustReveal.js @@ -0,0 +1,101 @@ +"use client"; + +import { Typography } from '@mui/material'; +import { motion } from 'framer-motion'; +import { Fragment, useState, useEffect } from 'react'; + +const MAX_ANIMATED_LENGTH = 300; // Don't animate texts longer than this + +const DustReveal = ({ text, delay = 0, duration = 0.8, className = "", sx = {}, style = {} }) => { + const [isVisible, setIsVisible] = useState(false); + + useEffect(() => { + const timer = setTimeout(() => { + setIsVisible(true); + }, delay * 1000); + + return () => clearTimeout(timer); + }, [delay]); + + // For long texts, just render as plain text to avoid performance issues + if (text.length > MAX_ANIMATED_LENGTH) { + return ( + + {text} + + ); + } + + // Split preserving whitespace as separate tokens so the browser keeps real + // line-break opportunities between words (otherwise motion.span transforms + // turn each token into an atomic inline-block and the text never wraps). + const tokens = text.split(/(\s+)/).filter(t => t.length > 0); + const animatedCount = tokens.filter(t => !/^\s+$/.test(t)).length || 1; + const staggerDelay = (duration * 0.1) / animatedCount; + + const containerVariants = { + hidden: {}, + visible: { + transition: { + staggerChildren: staggerDelay, + delayChildren: 0.1 + } + } + }; + + const wordVariants = { + hidden: { + opacity: 0, + y: 20, + scale: 0.8, + filter: "blur(4px)", + rotateX: -90 + }, + visible: { + opacity: 1, + y: 0, + scale: 1, + filter: "blur(0px)", + rotateX: 0, + transition: { + type: "spring", + damping: 15, + stiffness: 200, + mass: 0.8, + duration: duration * 0.6 + } + } + }; + + return ( + + {tokens.map((token, index) => { + if (/^\s+$/.test(token)) { + return {token}; + } + return ( + + {token} + + ); + })} + + ); +}; + +export default DustReveal; \ No newline at end of file diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/DustText.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/DustText.js new file mode 100644 index 000000000..b370a3211 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/DustText.js @@ -0,0 +1,117 @@ +"use client"; +import { Typography } from "@mui/material"; +import { motion } from "framer-motion"; +import { useEffect, useRef, useState } from "react"; + +const DustText = ({ + text, + duration = 1.5, + delay = 0.05, + blur = 6, + distance = -25, + sx = {}, +}) => { + const lines = text.split("\n"); + const scrollRef = useRef(null); + const [showTopGradient, setShowTopGradient] = useState(false); + const [showBottomGradient, setShowBottomGradient] = useState(false); + + useEffect(() => { + const checkScroll = () => { + if (!scrollRef.current) return; + + const { scrollTop, scrollHeight, clientHeight } = scrollRef.current; + + // Mostrar gradiente superior si no estamos arriba del todo + setShowTopGradient(scrollTop > 5); + + // Mostrar gradiente inferior si no estamos abajo del todo + setShowBottomGradient(scrollTop < scrollHeight - clientHeight - 5); + }; + + // Check inicial + checkScroll(); + + // Listener para scroll + const element = scrollRef.current; + element?.addEventListener("scroll", checkScroll); + + return () => { + element?.removeEventListener("scroll", checkScroll); + }; + }, [text]); // Re-check cuando cambie el texto + + return ( +
+ {/* Gradiente superior */} +
+ + {/* Contenedor con scroll */} +
+ {lines.map((line, index) => ( + + + {line} + + + ))} +
+ + {/* Gradiente inferior */} +
+
+ ); +}; + +export default DustText; \ No newline at end of file diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/DynamicChip.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/DynamicChip.js new file mode 100644 index 000000000..7f35a37e6 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/DynamicChip.js @@ -0,0 +1,170 @@ +"use client"; + +import { ExpandMore as ExpandMoreIcon } from "@mui/icons-material"; +import { CircularProgress, Typography, useTheme } from "@mui/material"; +import { AnimatePresence, motion } from "framer-motion"; +import { useEffect, useState } from "react"; + +export default function DynamicChip({ + icon: Icon, + label, + status = "success", + content, + onExpand, + isActive, + startDelay = 0, +}) { + const theme = useTheme(); + const [isVisible, setIsVisible] = useState(true); // Start visible immediately + const [isLoading, setIsLoading] = useState(true); + const [isHovered, setIsHovered] = useState(false); + const [showExpandIcon, setShowExpandIcon] = useState(false); + + const getStatusColor = () => { + switch (status) { + case "error": + return theme.palette.error?.main || "#f44336"; + case "warning": + return theme.palette.warning?.main || "#ff9800"; + case "info": + return theme.palette.info?.main || "#2196f3"; + case "purple": + return "#9c27b0"; + case "success": + default: + return theme.palette.success?.main || theme.palette.secondary.main; + } + }; + + const statusColor = getStatusColor(); + + useEffect(() => { + // Se expande automáticamente + setTimeout(() => setShowExpandIcon(true), startDelay + 500); + + // Termina de cargar + setTimeout(() => setIsLoading(false), startDelay + 1700); + + // Se contrae automáticamente + setTimeout(() => setShowExpandIcon(false), startDelay + 2200); + }, [startDelay]); + + const handleClick = () => { + if (isVisible) { + if (isActive) { + onExpand(null); + } else { + onExpand({ + label, + status, + content: content || "No additional information available", + }); + } + } + }; + + // Mostrar texto si está en hover O si está mostrando el ícono de expandir O si está activo + const shouldShowText = isHovered || showExpandIcon || isActive; + + return ( + + {isVisible && ( + setIsHovered(true)} + onMouseLeave={() => setIsHovered(false)} + style={{ + height: 40, + minWidth: 40, + backgroundColor: isActive ? `${statusColor}15` : "transparent", + border: `1px solid ${!isLoading ? statusColor : "#999"}`, + borderRadius: 20, + display: "inline-flex", + alignItems: "center", + justifyContent: "flex-start", + paddingLeft: 12, + paddingRight: shouldShowText ? 16 : 12, + overflow: "hidden", + cursor: "pointer", + boxShadow: isHovered ? "0 4px 12px rgba(0, 0, 0, 0.15)" : "none", + }} + > + {/* Ícono principal */} + + {isLoading ? ( + + ) : ( + + )} + + + {/* Contenedor del texto y flecha con animación suave */} + + + {label} + + + {/* Ícono de expandir solo cuando showExpandIcon es true */} + + {showExpandIcon && ( + + + + )} + + + + )} + + ); +} diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/Header.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/Header.js new file mode 100644 index 000000000..99bb1ec13 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/Header.js @@ -0,0 +1,460 @@ +"use client"; + +import { Avatar, Box, Button, Chip, Dialog, DialogActions, DialogContent, DialogTitle, Divider, IconButton, ListItemIcon, ListSubheader, Menu, MenuItem, Skeleton, Tooltip, Typography } from "@mui/material"; +import { AnimatePresence, motion } from "framer-motion"; +import Image from "next/image"; +import { Building2, Check, ChevronDown, ClipboardCopy, Download, LogOut, Menu as MenuIcon, Share2, SquarePen, Users, X } from "lucide-react"; +import { useEffect, useState } from "react"; +import BubbleModelSelector from "./BubbleModelSelector"; + +const BrainFreezeIcon = ({ size = 16, color = "currentColor" }) => ( + + + +); + +export default function Header({ + models = [], + selectedModel, + onModelChange, + loadingModels, + onNewConversation, + isMobile = false, + onMenuToggle, + chatHistory = [], + showLabChip = true, + showLabIcon = true, + appTitle = "", + + + accentColor = "#C74634", + minimal = false, + isDarkBg = false, + appMode, + onToggleAppMode, +}) { + const [menuAnchor, setMenuAnchor] = useState(null); + const [user, setUser] = useState(null); + const [loadingUser, setLoadingUser] = useState(true); + const [userMenuAnchor, setUserMenuAnchor] = useState(null); + const [shareOpen, setShareOpen] = useState(false); + const [copied, setCopied] = useState(false); + const [hasAnimated, setHasAnimated] = useState(false); + useEffect(() => { + const key = "header-animated"; + if (sessionStorage.getItem(key)) setHasAnimated(true); + else sessionStorage.setItem(key, "1"); + }, []); + + const buildExportData = () => ({ + exported_at: new Date().toISOString(), + model: selectedModel, + exchange_count: chatHistory.length, + exchanges: chatHistory.map(exchange => ({ + user: exchange.userMessage || null, + assistant: exchange.rawAssistantText || null, + assistant_parsed: exchange.responses || [], + })), + }); + + const handleDownloadConversation = () => { + const exportData = buildExportData(); + const blob = new Blob([JSON.stringify(exportData, null, 2)], { type: 'application/json' }); + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = `conversation-${new Date().toISOString().slice(0, 19).replace(/:/g, '-')}.json`; + a.click(); + URL.revokeObjectURL(url); + setShareOpen(false); + }; + + const handleCopyConversation = () => { + const text = JSON.stringify(buildExportData(), null, 2); + const doCopy = () => { + if (navigator.clipboard?.writeText) { + return navigator.clipboard.writeText(text); + } + const ta = document.createElement("textarea"); + ta.value = text; + ta.style.cssText = "position:fixed;opacity:0"; + document.body.appendChild(ta); + ta.select(); + document.execCommand("copy"); + document.body.removeChild(ta); + return Promise.resolve(); + }; + doCopy().then(() => { + setCopied(true); + setTimeout(() => setCopied(false), 2000); + }); + }; + + useEffect(() => { + fetch('/api/auth/session') + .then(res => res.json()) + .then(data => { + if (data.authenticated) setUser(data.user); + }) + .catch(() => {}) + .finally(() => setLoadingUser(false)); + }, []); + + return ( + + {/* Left side: hamburger (mobile) + Title */} + + {isMobile && onMenuToggle && ( + + + + )} + + + {showLabIcon && Lab Flask} + + {appTitle || (<>OCI{" "}Enterprise AI Agents)} + + {showLabChip && ( + + )} + + + + + {/* Right controls */} + {!minimal && + {/* Model selector - desktop only */} + {!isMobile && ( + <> + + !loadingModels && setMenuAnchor(e.currentTarget)} + sx={{ + display: "flex", + alignItems: "center", + gap: 1, + cursor: loadingModels ? "default" : "pointer", + backgroundColor: "transparent", + borderRadius: 1, + px: 1.5, + py: 0.75, + "&:hover": { + backgroundColor: isDarkBg ? "rgba(255,255,255,0.06)" : "rgba(0,0,0,0.04)", + }, + }} + > + + {loadingModels ? ( + + + + ) : ( + + + + {selectedModel?.replace(/^[a-z]+\./, "") || "Select model"} + + + )} + + + + + + setMenuAnchor(null)} + accentColor={accentColor} + /> + + )} + + {/* App Mode toggle — mobile only */} + {isMobile && appMode && onToggleAppMode && ( + + + {appMode === "internal" ? : } + + + )} + + + + setShareOpen(true)} + disabled={chatHistory.length === 0} + sx={{ + color: isDarkBg ? "rgba(255,255,255,0.5)" : "rgba(0, 0, 0, 0.4)", + backgroundColor: "transparent", + "&:hover": { + backgroundColor: isDarkBg ? "rgba(255,255,255,0.06)" : "rgba(0,0,0,0.04)", + color: isDarkBg ? "rgba(255,255,255,0.7)" : "rgba(0, 0, 0, 0.6)", + }, + "&.Mui-disabled": { + color: isDarkBg ? "rgba(255,255,255,0.15)" : "rgba(0, 0, 0, 0.15)", + }, + }} + > + + + + + + + + + + + + {/* User avatar - desktop only */} + {!isMobile && loadingUser && ( + + + + )} + {!isMobile && !loadingUser && user && ( + <> + + setUserMenuAnchor(e.currentTarget)} + sx={{ ml: 0.5 }} + > + + {(user.name || user.email || "U").charAt(0).toUpperCase()} + + + + setUserMenuAnchor(null)} + PaperProps={{ sx: { minWidth: 180 } }} + > + + + + {user.name} + + + {user.email} + + + + + + { window.location.href = '/api/auth/logout'; }} + sx={{ fontSize: "0.85rem", color: "error.main" }} + > + + + + Sign out + + + + )} + } + + {/* Share Dialog */} + setShareOpen(false)} maxWidth="sm" fullWidth> + + + + + Share conversation + + setShareOpen(false)} size="small" sx={{ color: 'text.secondary' }}> + + + + + + + Download a JSON file with the full conversation. + + + + Summary + + + + Exchanges + {chatHistory.length} + + + Model + {selectedModel?.replace(/^[a-z]+\./, '') || '—'} + + + Exported at + {new Date().toLocaleString()} + + + + + + + + + + + ); +} diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/IOSSwitch.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/IOSSwitch.js new file mode 100644 index 000000000..87ecfab43 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/IOSSwitch.js @@ -0,0 +1,54 @@ +"use client"; + +import { styled } from '@mui/material/styles'; +import Switch from '@mui/material/Switch'; + +const IOSSwitch = styled((props) => ( + +))(({ theme }) => ({ + width: 42, + height: 26, + padding: 0, + '& .MuiSwitch-switchBase': { + padding: 0, + margin: 2, + transitionDuration: '300ms', + '&.Mui-checked': { + transform: 'translateX(16px)', + color: '#fff', + '& + .MuiSwitch-track': { + backgroundColor: '#65C466', + opacity: 1, + border: 0, + }, + '&.Mui-disabled + .MuiSwitch-track': { + opacity: 0.5, + }, + }, + '&.Mui-focusVisible .MuiSwitch-thumb': { + color: '#33cf4d', + border: '6px solid #fff', + }, + '&.Mui-disabled .MuiSwitch-thumb': { + color: theme.palette.grey[100], + }, + '&.Mui-disabled + .MuiSwitch-track': { + opacity: 0.7, + }, + }, + '& .MuiSwitch-thumb': { + boxSizing: 'border-box', + width: 22, + height: 22, + }, + '& .MuiSwitch-track': { + borderRadius: 26 / 2, + backgroundColor: '#E9E9EA', + opacity: 1, + transition: theme.transitions.create(['background-color'], { + duration: 500, + }), + }, +})); + +export default IOSSwitch; diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/InteractiveChoice.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/InteractiveChoice.js new file mode 100644 index 000000000..a28bf8c20 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/InteractiveChoice.js @@ -0,0 +1,84 @@ +"use client"; + +import { Button, Stack, Typography } from "@mui/material"; +import { ArrowForward } from "@mui/icons-material"; +import { motion } from "framer-motion"; + +export default function InteractiveChoice({ interactiveData, onChoiceSelect }) { + if (!interactiveData || interactiveData.inputType !== "choice") { + return null; + } + + return ( + + + {interactiveData.title && ( + + {interactiveData.title} + + )} + {interactiveData.options.map((option, index) => ( + + + + ))} + + + ); +} \ No newline at end of file diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/NeuralSpiralLoader.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/NeuralSpiralLoader.js new file mode 100644 index 000000000..b4932be8a --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/NeuralSpiralLoader.js @@ -0,0 +1,84 @@ +"use client"; + +import { useState, useEffect } from "react"; +import { Box } from "@mui/material"; +import { motion } from "framer-motion"; + +const redColor = "#C74634"; + +export default function NeuralSpiralLoader({ size = "medium", delay = 400, alwaysShow = false, color = redColor }) { + const [show, setShow] = useState(alwaysShow); + + useEffect(() => { + if (alwaysShow) return; + const timer = setTimeout(() => setShow(true), delay); + return () => clearTimeout(timer); + }, [delay, alwaysShow]); + + // Size presets + const sizes = { + small: { scale: 0.7 }, + medium: { scale: 1 }, + large: { scale: 1.3 }, + }; + + const s = sizes[size] || sizes.medium; + + const keyframes = ` + @keyframes cross-container-rotate-loader { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } + @keyframes breathe-cross-loader { + 0%, 100% { transform: scale(0.4); opacity: 0.2; } + 50% { transform: scale(1); opacity: 1; } + } + `; + + // Cross pattern: 5 dots in plus shape + const positions = [ + { x: 1, y: 0 }, // top + { x: 0, y: 1 }, // left + { x: 1, y: 1 }, // center + { x: 2, y: 1 }, // right + { x: 1, y: 2 }, // bottom + ]; + + if (!show) return null; + + return ( + <> + + + {positions.map((pos, i) => ( + + ))} + + + ); +} diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/OracleLogo.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/OracleLogo.js new file mode 100644 index 000000000..5557c1f82 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/OracleLogo.js @@ -0,0 +1,70 @@ +"use client"; + +import { useId } from "react"; +import { motion } from "framer-motion"; + +export default function OracleLogo({ accentColor = "#C74634", isDarkBg = false, maxHeight = 100, style }) { + const bg = isDarkBg ? "#1a1a1a" : "#ffffff"; + const rawId = useId(); + const uid = rawId.replace(/:/g, ""); + const leftId = `clip-left-${uid}`; + const rightId = `clip-right-${uid}`; + + const leftTransition = { type: "spring", stiffness: 45, damping: 13, mass: 1.2 }; + const rightTransition = { type: "spring", stiffness: 45, damping: 13, mass: 1.2, delay: 0.08 }; + + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ); +} diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/ScrollableList.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/ScrollableList.js new file mode 100644 index 000000000..70b6f2416 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/ScrollableList.js @@ -0,0 +1,377 @@ +"use client"; + +import { Box, CircularProgress, IconButton, Skeleton, Stack, Typography } from "@mui/material"; +import { AnimatePresence, motion } from "framer-motion"; +import { RefreshCw, Trash2 } from "lucide-react"; +import { memo, useCallback, useEffect, useRef, useState } from "react"; +import { formatRelativeTime } from "../../utils/relativeTime"; + +const SKELETON_COUNT = 4; +const MIN_LOADING_MS = 400; + +const scrollContainerSx = { + height: "200px", + width: "100%", + overflowY: "auto", + overflowX: "hidden", + paddingBottom: "40px", + "&::-webkit-scrollbar": { + display: "none", + }, + scrollbarWidth: "none", +}; + +const titleSx = { + fontSize: "0.75rem", + fontWeight: 500, + color: "rgba(0, 0, 0, 0.6)", + mb: 1, + letterSpacing: "0.08em", + textTransform: "uppercase", +}; + +const itemTextSx = { + fontSize: "0.9rem", + fontWeight: 200, + color: "rgba(0, 0, 0, 0.35)", + lineHeight: 1.3, + overflow: "hidden", + textOverflow: "ellipsis", + whiteSpace: "nowrap", + minWidth: 0, + flex: 1, +}; + +const itemContainerSx = { + padding: "6px 0", + cursor: "pointer", + borderRadius: "4px", + transition: "all 0.2s ease", + display: "flex", + alignItems: "center", + justifyContent: "space-between", + overflow: "hidden", + gap: 1, + position: "relative", + "&:hover": { + backgroundColor: "transparent", + transform: "translateX(2px)", + }, + "&:hover .delete-btn": { opacity: 1 }, + "&:hover .relative-date": { opacity: 0 }, +}; + +const gradientBaseSx = { + position: "absolute", + left: 0, + right: 0, + height: "60px", + pointerEvents: "none", + zIndex: 1, + transition: "opacity 0.3s ease", +}; + +const MAX_TITLE_LENGTH = 32; + +const ListItem = memo(({ item, index, isInitialRender, onClick, onDelete, isActive, accentColor, isDarkBg }) => { + const rawText = typeof item === 'string' ? item : item.title || item.id; + const displayText = rawText.length > MAX_TITLE_LENGTH + ? rawText.substring(0, MAX_TITLE_LENGTH) + '...' + : rawText; + const canDelete = typeof item === 'object' && item.id; + const timestamp = typeof item === 'object' ? (item.updatedAt || item.createdAt) : null; + const relativeLabel = formatRelativeTime(timestamp); + + const handleDelete = (e) => { + e.stopPropagation(); + if (onDelete && canDelete) { + onDelete(item, index); + } + }; + + return ( + + onClick && onClick(item, index)} + > + + {displayText} + + {relativeLabel && ( + + {relativeLabel} + + )} + {canDelete && ( + + + + )} + + + ); +}); + +ListItem.displayName = "ListItem"; + +export default memo(function ScrollableList({ + items, + title, + titleDelay = 0.8, + onItemClick, + onItemDelete, + emptyMessage = "No conversations yet", + activeId = null, + onRefresh, + initialLoading = false, + bgColor = "white", + accentColor = "#C74634", + isDarkBg = false, + hasMore = false, + isLoadingMore = false, + onLoadMore, +}) { + const scrollRef = useRef(null); + const [gradients, setGradients] = useState({ top: false, bottom: true }); + const [refreshing, setRefreshing] = useState(false); + const rafRef = useRef(null); + const isInitialRenderRef = useRef(true); + + // After first render, mark as not initial + useEffect(() => { + const timer = setTimeout(() => { + isInitialRenderRef.current = false; + }, 500); + return () => clearTimeout(timer); + }, []); + + const handleRefresh = useCallback(async () => { + if (refreshing || !onRefresh) return; + setRefreshing(true); + const start = Date.now(); + try { + await onRefresh(); + } finally { + const elapsed = Date.now() - start; + const remaining = MIN_LOADING_MS - elapsed; + if (remaining > 0) { + setTimeout(() => setRefreshing(false), remaining); + } else { + setRefreshing(false); + } + } + }, [onRefresh, refreshing]); + + const checkScrollPosition = useCallback(() => { + if (refreshing) return; + if (rafRef.current) cancelAnimationFrame(rafRef.current); + + rafRef.current = requestAnimationFrame(() => { + if (scrollRef.current) { + const { scrollTop, scrollHeight, clientHeight } = scrollRef.current; + setGradients({ + top: scrollTop > 0, + bottom: scrollTop + clientHeight < scrollHeight, + }); + // Infinite scroll: trigger load when within 40px of bottom + if (hasMore && !isLoadingMore && onLoadMore && scrollTop + clientHeight >= scrollHeight - 40) { + onLoadMore(); + } + } + }); + }, [refreshing, hasMore, isLoadingMore, onLoadMore]); + + useEffect(() => { + checkScrollPosition(); + return () => { + if (rafRef.current) cancelAnimationFrame(rafRef.current); + }; + }, [items, refreshing, checkScrollPosition]); + + // Get stable key for item + const getItemKey = (item, index) => { + if (typeof item === 'string') return `str-${item}`; + return item.id || `idx-${index}`; + }; + + return ( + + + + + {title} + + {onRefresh && ( + + + + )} + + + + + + {(refreshing || initialLoading) ? ( + + {Array.from({ length: SKELETON_COUNT }).map((_, i) => ( + + + + ))} + + ) : items.length === 0 ? ( + + {emptyMessage} + + ) : ( + + + {items.map((item, index) => ( + + ))} + + {isLoadingMore && ( + + + + )} + + )} + + + + + + + {/* Spin keyframes for refresh icon */} + + + ); +}); diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/TypingEffect.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/TypingEffect.js new file mode 100644 index 000000000..99c2641f5 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/TypingEffect.js @@ -0,0 +1,51 @@ +"use client"; + +import { useEffect, useState, useRef } from "react"; + +const TypingEffect = ({ text, speed = 30, delay = 0, children }) => { + const [displayedText, setDisplayedText] = useState(""); + const currentIndexRef = useRef(0); + + useEffect(() => { + if (!text) { + setDisplayedText(""); + currentIndexRef.current = 0; + return; + } + + // If text has been shortened (shouldn't happen), reset + if (text.length < currentIndexRef.current) { + currentIndexRef.current = 0; + setDisplayedText(""); + } + + const startTyping = () => { + const interval = setInterval(() => { + if (currentIndexRef.current < text.length) { + setDisplayedText(text.substring(0, currentIndexRef.current + 1)); + currentIndexRef.current++; + } else { + clearInterval(interval); + } + }, speed); + + return interval; + }; + + const timeout = setTimeout(startTyping, delay); + + return () => { + clearTimeout(timeout); + }; + }, [text, speed, delay]); + + // If children is a function, call it with displayedText + if (typeof children === 'function') { + return children(displayedText); + } + + // Otherwise just return the text + return <>{displayedText}; +}; + +export default TypingEffect; \ No newline at end of file diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/VerticalTabs.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/VerticalTabs.js new file mode 100644 index 000000000..dc760ae73 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/ui/VerticalTabs.js @@ -0,0 +1,74 @@ +"use client"; + +import { Box, Tabs, Tab, useMediaQuery, useTheme } from "@mui/material"; + +export default function VerticalTabs({ + activeTab, + onTabChange, + tabs, + tabsWidth = "200px", + footer, + children +}) { + const theme = useTheme(); + const isMobile = useMediaQuery(theme.breakpoints.down("md")); + + const tabsEl = ( + onTabChange(newValue)} + variant={isMobile ? "fullWidth" : "standard"} + sx={{ + ...(isMobile + ? { borderBottom: 1, borderColor: "divider" } + : { minWidth: tabsWidth }), + ".MuiTab-root": { + textAlign: isMobile ? "center" : "right", + alignItems: isMobile ? "center" : "flex-end", + fontWeight: 300, + fontSize: "0.95rem", + color: "var(--dm-muted, rgba(0, 0, 0, 0.6))", + minHeight: isMobile ? 42 : 48, + "&.Mui-selected": { + color: "var(--dm-text, #1a1a1a)", + fontWeight: 400, + }, + }, + }} + > + {tabs.map((tab, index) => ( + + ))} + + ); + + return ( + + {isMobile ? tabsEl : ( + + {tabsEl} + {footer && ( + + {footer} + + )} + + )} + + {/* Tab Content */} + + {children} + + + ); +} diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/widgets/Charts.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/widgets/Charts.js new file mode 100644 index 000000000..1dff3b94e --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/widgets/Charts.js @@ -0,0 +1,186 @@ +"use client"; + +import { Box } from "@mui/material"; +import { motion } from "framer-motion"; +import { + LineChart as ReLineChart, + Line, + BarChart as ReBarChart, + Bar, + PieChart as RePieChart, + Pie, + Cell, + XAxis, + YAxis, + CartesianGrid, + Tooltip, + Legend, + ResponsiveContainer, +} from "recharts"; +import { + parseSeriesChart, + parsePieChart, + getChartColor, + getChartColors, +} from "../../utils/chartParser"; + +const CHART_HEIGHT = { s: 150, m: 200, l: 280 }; + +const getHeight = (h) => { + if (!h) return CHART_HEIGHT.m; + if (typeof h === "number") return h; + return CHART_HEIGHT[h] || CHART_HEIGHT.m; +}; + +const ChartWrapper = ({ children, height }) => ( + + + {children} + + +); + +export function WidgetLineChart({ props }) { + const { data, series } = parseSeriesChart(props); + const colors = getChartColors(props._colors); + const showGrid = props._grid !== "0"; + const showLegend = props._legend && props._legend !== "n"; + const height = getHeight(props._h); + + return ( + + + {showGrid && } + + + + {showLegend && } + {series.map((s, i) => ( + + ))} + + + ); +} + +export function WidgetBarChart({ props }) { + const { data, series } = parseSeriesChart(props); + const colors = getChartColors(props._colors); + const showGrid = props._grid !== "0"; + const showLegend = props._legend && props._legend !== "n"; + const height = getHeight(props._h); + const stacked = props._stack === "1"; + + return ( + + + {showGrid && } + + + + {showLegend && } + {series.map((s, i) => ( + + ))} + + + ); +} + +export function WidgetPieChart({ props, isDonut = false }) { + const { data, centerValue, centerLabel } = parsePieChart(props); + const colors = getChartColors(props._colors); + const showLegend = props._legend !== "n"; + const baseHeight = getHeight(props._h); + const height = Math.max(baseHeight, 220) + (showLegend ? 40 : 0); + + return ( + + + { + if (percent < 0.08) return null; // Don't show label for slices < 8% + const RADIAN = Math.PI / 180; + const radius = innerRadius + (outerRadius - innerRadius) * 0.5; + const x = cx + radius * Math.cos(-midAngle * RADIAN); + const y = cy + radius * Math.sin(-midAngle * RADIAN); + return ( + + {`${(percent * 100).toFixed(0)}%`} + + ); + }} + labelLine={false} + > + {data.map((_, i) => ( + + ))} + + [`${value}`, name]} + /> + {showLegend && ( + + )} + {isDonut && centerValue && ( + + + {centerValue} + + {centerLabel && ( + + {centerLabel} + + )} + + )} + + + ); +} + +export function WidgetDonutChart({ props }) { + return ; +} diff --git a/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/widgets/Widget.js b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/widgets/Widget.js new file mode 100644 index 000000000..0c3915434 --- /dev/null +++ b/ai/gen-ai-agents/oci-enterprise-ai-chat/files/src/app/components/widgets/Widget.js @@ -0,0 +1,3280 @@ +"use client"; + +import { Box, Checkbox, CircularProgress, FormControlLabel, InputAdornment, LinearProgress, MenuItem, Radio, RadioGroup, Rating, Select, Skeleton, Slider, Switch, TextField, Typography } from "@mui/material"; +import { motion } from "framer-motion"; +import { + Sun, Cloud, CloudRain, CloudSnow, AlertCircle, Check, X, Info, + Star, Heart, User, Users, Mail, Phone, MapPin, Clock, Calendar, + Search, Settings, Home, File, Folder, Image as ImageIcon, Video, + Music, Download, Upload, Link, Share, Edit, Trash, Plus, Minus, + ArrowUp, ArrowDown, ArrowLeft, ArrowRight, Quote, Code, List, Send, + Volume2, Presentation, Maximize2, ExternalLink, Play, Copy +} from "lucide-react"; +import { useState, useCallback, useEffect, useMemo } from "react"; +import { DataGrid } from "@mui/x-data-grid"; +import { parseKey, INTERACTIVE_KEYS, CHART_KEYS } from "../../utils/widgetParser"; +import { WidgetLineChart, WidgetBarChart, WidgetPieChart, WidgetDonutChart } from "./Charts"; +import { + COLORS, + TYPOGRAPHY, + SPACING, + BORDER, + BUTTON, + INPUT, + ANIMATION, + getColor, + getSize, +} from "../../config/widgetTheme"; + +const ICONS = { + sun: Sun, cloud: Cloud, rain: CloudRain, snow: CloudSnow, + alert: AlertCircle, check: Check, x: X, info: Info, + star: Star, heart: Heart, user: User, users: Users, + mail: Mail, phone: Phone, map: MapPin, clock: Clock, + calendar: Calendar, search: Search, settings: Settings, home: Home, + file: File, folder: Folder, image: ImageIcon, video: Video, + music: Music, download: Download, upload: Upload, link: Link, + share: Share, edit: Edit, trash: Trash, plus: Plus, minus: Minus, + "arrow-up": ArrowUp, "arrow-down": ArrowDown, + "arrow-left": ArrowLeft, "arrow-right": ArrowRight, + quote: Quote, code: Code, list: List, send: Send +}; + +function WidgetSkeleton({ type }) { + const skeletonMap = { + t: { width: "60%", height: 24 }, + s: { width: "40%", height: 18 }, + d: { width: "100%", height: 16, lines: 2 }, + i: { width: "100%", height: 120, variant: "rectangular" }, + ic: { width: 24, height: 24, variant: "circular" }, + n: { width: 80, height: 32 }, + p: { width: "100%", height: 8 }, + bt: { width: 100, height: 36, variant: "rectangular" }, + in: { width: "100%", height: 40, variant: "rectangular" }, + sl: { width: "100%", height: 40, variant: "rectangular" }, + }; + + const config = skeletonMap[type] || { width: "50%", height: 20 }; + + if (config.lines) { + return ( + + {Array.from({ length: config.lines }).map((_, i) => ( + + ))} + + ); + } + + return ; +} + +function WidgetIcon({ name, size = 24, color }) { + const IconComponent = ICONS[name]; + if (!IconComponent) return null; + return ( + + + + ); +} + +function WidgetImage({ src, position }) { + const isUrl = src.startsWith('http://') || src.startsWith('https://') || src.startsWith('/'); + if (!isUrl) return null; + + if (position === "bg") { + return ( + + ); + } + + return ( + + { e.target.style.display = "none"; }} /> + + ); +} + +function WidgetProgress({ value, color }) { + return ( + + + + + + ); +} + +function WidgetList({ items }) { + const listItems = items.split(";").filter(Boolean); + return ( + + {listItems.map((item, i) => ( + {item.trim()} + ))} + + ); +} + +function WidgetLinks({ links, color }) { + // Format: "Label>url;Label2>url2" or just "url1;url2" + const linkItems = links.split(";").filter(Boolean).map(item => { + const trimmed = item.trim(); + if (trimmed.includes(">")) { + const [label, url] = trimmed.split(">"); + return { label: label.trim(), url: url.trim() }; + } + // If no label, use the URL as label (simplified) + const url = trimmed; + const label = url.replace(/^https?:\/\//, "").split("/")[0]; + return { label, url }; + }); + + return ( + + {linkItems.map((item, i) => ( + + + + {item.label} + + + ))} + + ); +} + +function WidgetCode({ code }) { + return ( + + + {code} + + + ); +} + +function WidgetQuote({ text, color }) { + return ( + + + “{text}” + + + ); +} + +function WidgetAudio({ src, color }) { + // src can be: base64 data URL, raw base64 string, or regular URL + const [audioSrc, setAudioSrc] = useState(null); + + useEffect(() => { + if (!src) return; + + // If it's already a data URL or regular URL, use it directly + if (src.startsWith('data:') || src.startsWith('http://') || src.startsWith('https://') || src.startsWith('/')) { + setAudioSrc(src); + } else { + // Assume it's raw base64 - try to detect format or default to mp3 + setAudioSrc(`data:audio/mp3;base64,${src}`); + } + }, [src]); + + if (!audioSrc) return null; + + return ( + + + ); +} + +// Status card configuration - using theme colors +const STATUS_CONFIG = { + success: { icon: "check", color: COLORS.success, bgColor: "rgba(76, 130, 92, 0.12)" }, // Pine 100 + error: { icon: "x", color: COLORS.error, bgColor: "rgba(199, 70, 52, 0.1)" }, // Oracle Red + warning: { icon: "alert", color: COLORS.warning, bgColor: "rgba(241, 177, 63, 0.12)" }, // Brand Yellow + info: { icon: "info", color: COLORS.info, bgColor: "rgba(53, 83, 92, 0.1)" }, // Pine 140 +}; + +// Convert URLs in text to clickable links +function linkifyText(text) { + if (!text || typeof text !== 'string') return text; + const urlRegex = /(https?:\/\/[^\s]+)/g; + const parts = text.split(urlRegex); + if (parts.length === 1) return text; + return parts.map((part, i) => + urlRegex.test(part) ? ( + {part} + ) : part + ); +} + +function WidgetStatusCard({ status, title, description, buttons, onButtonClick, clickedButton, loadingButton, disabled }) { + const config = STATUS_CONFIG[status] || STATUS_CONFIG.info; + const IconComponent = ICONS[config.icon]; + + return ( + + + {/* Circular icon badge */} + + + {IconComponent && } + + + + {/* Title and description */} + + {title && ( + + + {title} + + + )} + {description && ( + + + {linkifyText(description)} + + + )} + + + {/* Buttons row */} + {buttons && buttons.length > 0 && ( + + + {buttons.map((btn, i) => { + const isPrimary = i === 0; + const isThisClicked = clickedButton === btn; + const isAnyClicked = clickedButton !== null || disabled; + + return ( + + ); + })} + + + )} + + + ); +} + +// Interactive Components +function WidgetInput({ placeholder, value, onChange, onEnter, disabled }) { + return ( + onChange(e.target.value)} + onKeyDown={(e) => { + if (e.key === "Enter" && onEnter && !disabled) { + e.preventDefault(); + onEnter(); + } + }} + disabled={disabled} + fullWidth + sx={{ + "& .MuiOutlinedInput-root": { + backgroundColor: INPUT.backgroundColor, + "& fieldset": { border: INPUT.border }, + "&:hover": { backgroundColor: disabled ? INPUT.backgroundColor : INPUT.hoverBackground }, + "&.Mui-focused": { backgroundColor: INPUT.hoverBackground } + } + }} + /> + ); +} + +function WidgetSelect({ options, value, onChange, disabled }) { + let label = null; + let opts = options; + + // Check for label with ? separator + if (options.includes("?")) { + const parts = options.split("?"); + label = parts[0].trim(); + opts = parts.slice(1).join("?"); // In case there are ? in options + } + + const optList = opts.split(";").filter(Boolean); + + return ( + + {label && ( + + {label} + + )} + + + ); +} + +function WidgetCheckbox({ label, checked, onChange, disabled }) { + return ( + onChange(e.target.checked)} disabled={disabled} sx={{ color: COLORS.text.muted, "&.Mui-checked": { color: COLORS.secondary } }} />} + label={label} + disabled={disabled} + sx={{ "& .MuiFormControlLabel-label": { fontSize: BUTTON.fontSize } }} + /> + ); +} + +function WidgetRange({ range, value, onChange, disabled }) { + const [min, max] = range.split("-").map(n => parseInt(n) || 0); + return ( + + onChange(v)} + disabled={disabled} + sx={{ + color: COLORS.secondary, + "& .MuiSlider-thumb": { + "&:hover, &.Mui-focusVisible": { boxShadow: `0 0 0 8px ${COLORS.background.hover}` } + }, + "& .MuiSlider-track": { backgroundColor: COLORS.secondary }, + "& .MuiSlider-rail": { backgroundColor: COLORS.background.hover } + }} + /> + {value ?? min} + + ); +} + +// Radio buttons for single selection +function WidgetRadio({ options, value, onChange, disabled }) { + let label = null; + let opts = options; + + if (options.includes("?")) { + const parts = options.split("?"); + label = parts[0].trim(); + opts = parts.slice(1).join("?"); + } + + const optList = opts.split(";").filter(Boolean); + + return ( + + {label && ( + + {label} + + )} + onChange(e.target.value)}> + {optList.map((opt, i) => ( + } + label={opt.trim()} + disabled={disabled} + sx={{ "& .MuiFormControlLabel-label": { fontSize: "0.9rem" } }} + /> + ))} + + + ); +} + +// Multi-select dropdown +function WidgetMultiSelect({ options, value, onChange, disabled }) { + let label = null; + let opts = options; + + if (options.includes("?")) { + const parts = options.split("?"); + label = parts[0].trim(); + opts = parts.slice(1).join("?"); + } + + const optList = opts.split(";").filter(Boolean); + const selectedValues = value || []; + + return ( + + {label && ( + + {label} + + )} + + + ); +} + +// Date picker +function WidgetDate({ label, value, onChange, disabled }) { + return ( + + {label && ( + + {label} + + )} + onChange(e.target.value)} + disabled={disabled} + fullWidth + sx={{ + "& .MuiOutlinedInput-root": { + backgroundColor: INPUT.backgroundColor, + "& fieldset": { border: INPUT.border }, + "&:hover": { backgroundColor: disabled ? INPUT.backgroundColor : INPUT.hoverBackground }, + } + }} + /> + + ); +} + +// Time picker +function WidgetTime({ label, value, onChange, disabled }) { + return ( + + {label && ( + + {label} + + )} + onChange(e.target.value)} + disabled={disabled} + fullWidth + sx={{ + "& .MuiOutlinedInput-root": { + backgroundColor: INPUT.backgroundColor, + "& fieldset": { border: INPUT.border }, + "&:hover": { backgroundColor: disabled ? INPUT.backgroundColor : INPUT.hoverBackground }, + } + }} + /> + + ); +} + +// Star rating +function WidgetRating({ label, max, value, onChange, disabled }) { + const maxStars = parseInt(max) || 5; + return ( + + {label && ( + + {label} + + )} + onChange(v)} + disabled={disabled} + sx={{ color: COLORS.warning }} + /> + + ); +} + +// Toggle switch +function WidgetToggle({ label, checked, onChange, disabled }) { + return ( + onChange(e.target.checked)} + disabled={disabled} + sx={{ + "& .MuiSwitch-switchBase.Mui-checked": { color: COLORS.secondary }, + "& .MuiSwitch-switchBase.Mui-checked + .MuiSwitch-track": { backgroundColor: COLORS.secondary }, + }} + /> + } + label={label} + disabled={disabled} + sx={{ "& .MuiFormControlLabel-label": { fontSize: "0.9rem" } }} + /> + ); +} + +// Textarea (multiline input) +function WidgetTextarea({ placeholder, value, onChange, disabled, rows = 3 }) { + return ( + onChange(e.target.value)} + disabled={disabled} + multiline + rows={rows} + fullWidth + sx={{ + "& .MuiOutlinedInput-root": { + backgroundColor: INPUT.backgroundColor, + "& fieldset": { border: INPUT.border }, + "&:hover": { backgroundColor: disabled ? INPUT.backgroundColor : INPUT.hoverBackground }, + "&.Mui-focused": { backgroundColor: INPUT.hoverBackground } + } + }} + /> + ); +} + +// Row form layout - renders interactive elements in key-value rows +function WidgetRowForm({ + props, + formState, + updateFormState, + handleButtonClick, + clickedButton, + loadingButton, + disabled, + themeColor, +}) { + // Get all keys in order, filtering out style keys + const allKeys = Object.keys(props).filter(k => !k.startsWith("_")); + + // Separate into fields (non-buttons) and buttons + const fieldKeys = allKeys.filter(k => { + const base = k.replace(/\d+$/, ""); + return base !== "bt" && base !== "t" && base !== "d" && base !== "s"; + }); + const buttonKeys = allKeys.filter(k => k.startsWith("bt")); + const hasTitle = props.t || props.s; + + // Helper to extract label, options, and default value from value string + // Formats: "Label", "Label=default", "Label?opts", "Label?opts=default" + const parseFieldValue = (value) => { + let label = value; + let options = value; + let defaultValue = null; + + // First, extract default value (after =) + if (value.includes("=")) { + const eqIndex = value.lastIndexOf("="); + defaultValue = value.substring(eqIndex + 1).trim(); + value = value.substring(0, eqIndex); + } + + // Then extract label and options (before/after ?) + if (value.includes("?")) { + label = value.split("?")[0].trim(); + options = value.split("?").slice(1).join("?"); + } else { + label = value; + options = value; + } + + return { label, options, defaultValue }; + }; + + // Legacy helpers for backwards compatibility + const extractLabel = (value) => parseFieldValue(value).label; + const extractOptions = (value) => parseFieldValue(value).options; + + // Render a single row with label and component + const renderRow = (key, index) => { + const base = key.replace(/\d+$/, ""); + const value = props[key]; + const { label, options, defaultValue } = parseFieldValue(value); + const isFormDisabled = disabled || clickedButton !== null || loadingButton !== null; + const isLastField = index === fieldKeys.length - 1; + + let component = null; + + switch (base) { + case "in": + const inputVal = formState[label] !== undefined ? formState[label] : (defaultValue || ""); + component = ( + updateFormState(label, v)} + disabled={isFormDisabled} + /> + ); + break; + + case "ta": + // Convert literal \n to actual newlines for textarea defaults + const taDefault = defaultValue ? defaultValue.replace(/\\n/g, '\n') : ""; + const taVal = formState[label] !== undefined ? formState[label] : taDefault; + component = ( + updateFormState(label, v)} + disabled={isFormDisabled} + /> + ); + break; + + case "sl": + const selectKey = `select_${key}`; + const selectVal = formState[selectKey] !== undefined ? formState[selectKey] : (defaultValue || ""); + component = ( + + ); + break; + + case "dt": + const dateKey = `date_${key}`; + const dateVal = formState[dateKey] !== undefined ? formState[dateKey] : (defaultValue || ""); + component = ( + updateFormState(dateKey, e.target.value)} + disabled={isFormDisabled} + fullWidth + sx={{ + "& .MuiOutlinedInput-root": { + backgroundColor: INPUT.backgroundColor, + "& fieldset": { border: INPUT.border }, + } + }} + /> + ); + break; + + case "tm": + const timeKey = `time_${key}`; + const timeVal = formState[timeKey] !== undefined ? formState[timeKey] : (defaultValue || ""); + component = ( + updateFormState(timeKey, e.target.value)} + disabled={isFormDisabled} + fullWidth + sx={{ + "& .MuiOutlinedInput-root": { + backgroundColor: INPUT.backgroundColor, + "& fieldset": { border: INPUT.border }, + } + }} + /> + ); + break; + + case "tg": + const toggleKey = `toggle_${key}`; + const toggleRaw = formState[toggleKey] !== undefined ? formState[toggleKey] : (defaultValue === "true" || defaultValue === "1"); + const toggleVal = toggleRaw === true || toggleRaw === "true" || toggleRaw === "1"; + component = ( + updateFormState(toggleKey, e.target.checked)} + disabled={isFormDisabled} + sx={{ + "& .MuiSwitch-switchBase.Mui-checked": { color: COLORS.secondary }, + "& .MuiSwitch-switchBase.Mui-checked + .MuiSwitch-track": { backgroundColor: COLORS.secondary }, + }} + /> + ); + break; + + case "cb": + const cbRaw = formState[label] !== undefined ? formState[label] : (defaultValue === "true" || defaultValue === "1"); + const cbVal = cbRaw === true || cbRaw === "true" || cbRaw === "1"; + component = ( + updateFormState(label, e.target.checked)} + disabled={isFormDisabled} + sx={{ color: COLORS.text.muted, "&.Mui-checked": { color: COLORS.secondary } }} + /> + ); + break; + + case "rg": + const rangeKey = `range_${key}`; + const [min, max] = options.split("-").map(n => parseInt(n) || 0); + const rangeDefault = defaultValue ? parseInt(defaultValue) : min; + const rangeVal = formState[rangeKey] !== undefined ? formState[rangeKey] : rangeDefault; + component = ( + + updateFormState(rangeKey, v)} + disabled={isFormDisabled} + sx={{ color: COLORS.secondary, flex: 1 }} + /> + + {rangeVal} + + + ); + break; + + default: + return null; + } + + if (!component) return null; + + return ( + + + + {label} + + + {component} + + + + ); + }; + + return ( + + {/* Title/subtitle header */} + {hasTitle && ( + + {props.t && ( + + + {props.t} + + + )} + {props.s && ( + + + {props.s} + + + )} + + )} + + {/* Field rows */} + + {fieldKeys.map((key, index) => renderRow(key, index))} + + + {/* Buttons row */} + {buttonKeys.length > 0 && ( + + + {buttonKeys.map((key, i) => { + const label = props[key]; + const isPrimary = i === 0; + const isThisClicked = clickedButton === label; + const isAnyClicked = clickedButton !== null || disabled; + + return ( + + ); + })} + + + )} + + ); +} + +// Calendar/Agenda Widget +function WidgetCalendar({ props }) { + // Parse days and events from props + // Format: dy:Mon,3 for day, ev:Title,Time,Color for events + const days = []; + let currentDay = null; + + // Get all keys in order + const allKeys = Object.keys(props); + + for (const key of allKeys) { + const baseKey = key.replace(/\d+$/, ''); + const value = props[key]; + + if (baseKey === 'dy') { + // Parse day: DayName,DayNumber + const parts = value.split(','); + currentDay = { + name: parts[0]?.trim() || '', + number: parts[1]?.trim() || '', + events: [] + }; + days.push(currentDay); + } else if (baseKey === 'ev' && currentDay) { + // Parse event: Title,Time,Color + const parts = value.split(','); + currentDay.events.push({ + title: parts[0]?.trim() || '', + time: parts[1]?.trim() || '', + color: getColor(parts[2]?.trim()) || COLORS.primary + }); + } + } + + if (days.length === 0) return null; + + return ( + + + {/* Optional title */} + {props.t && ( + + + {props.t} + + + )} + + {/* Days */} + + {days.map((day, dayIndex) => ( + + 0 ? `1px solid ${COLORS.background.hover}` : 'none', + }} + > + {/* Day column */} + + + {day.name} + + + {day.number} + + + + {/* Events column */} + + {day.events.length > 0 ? ( + + {day.events.map((event, eventIndex) => ( + + + {/* Color indicator */} + + {/* Event details */} + + + {event.title} + + + {event.time} + + + + + ))} + + ) : ( + + No events + + )} + + + + ))} + + + + ); +} + +// Timeline Widget - Shows phases with dates +function WidgetTimeline({ props }) { + const phases = []; + const allKeys = Object.keys(props); + const isHorizontal = props._dir === 'h' || props._dir === 'horizontal'; + + for (const key of allKeys) { + const baseKey = key.replace(/\d+$/, ''); + const value = props[key]; + + if (baseKey === 'ph') { + // Parse phase: Name,DateRange + const parts = value.split(','); + phases.push({ + name: parts[0]?.trim() || '', + date: parts.slice(1).join(',').trim() || '', + }); + } + } + + if (phases.length === 0) return null; + + // Horizontal Timeline Layout + if (isHorizontal) { + return ( + + + {props.t && ( + + {props.t} + + )} + + + {/* Horizontal line */} + + + + {phases.map((phase, index) => ( + + {/* Dot */} + + + + {phase.name} + + {phase.date && ( + + {phase.date} + + )} + + ))} + + + + + ); + } + + // Vertical Timeline Layout (default) + return ( + + + {props.t && ( + + {props.t} + + )} + + + {/* Vertical line */} + + + {phases.map((phase, index) => ( + + + {/* Dot */} + + + + {phase.name} + + {phase.date && ( + + {phase.date} + + )} + + + ))} + + + + ); +} + +// Table Widget - Shows structured data in rows and columns + +function WidgetTable({ props }) { + const [copied, setCopied] = useState(false); + const headers = []; + const rowsRaw = []; + + for (const key of Object.keys(props)) { + const baseKey = key.replace(/\d+$/, ''); + const value = props[key]; + if (baseKey === 'h') headers.push(...value.split(';').map(h => h.trim())); + else if (baseKey === 'r') rowsRaw.push(value.split(';').map(v => v.trim())); + } + + const columns = useMemo(() => headers.map((h, i) => ({ + field: `col${i}`, + headerName: h, + flex: 1, + minWidth: 120, + sortable: true, + })), [headers.join(';')]); + + const rows = useMemo(() => rowsRaw.map((row, rowIndex) => { + const obj = { id: rowIndex }; + row.forEach((cell, i) => { obj[`col${i}`] = cell; }); + return obj; + }), [rowsRaw.length, headers.length]); + + const toTSV = useCallback(() => { + const headerLine = headers.join('\t'); + const dataLines = rowsRaw.map(r => r.join('\t')); + return [headerLine, ...dataLines].join('\n'); + }, [headers, rowsRaw]); + + const handleCopy = useCallback(() => { + const text = toTSV(); + if (navigator.clipboard?.writeText) { + navigator.clipboard.writeText(text); + } else { + const ta = document.createElement('textarea'); + ta.value = text; + document.body.appendChild(ta); + ta.select(); + document.execCommand('copy'); + document.body.removeChild(ta); + } + setCopied(true); + setTimeout(() => setCopied(false), 2000); + }, [toTSV]); + + const handleDownloadCSV = useCallback(() => { + const headerLine = headers.join(','); + const dataLines = rowsRaw.map(r => r.map(cell => cell.includes(',') ? `"${cell}"` : cell).join(',')); + const csv = [headerLine, ...dataLines].join('\n'); + const blob = new Blob([csv], { type: 'text/csv' }); + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = `${props.t || 'table'}.csv`; + a.click(); + URL.revokeObjectURL(url); + }, [headers, rowsRaw, props.t]); + + if (columns.length === 0 && rows.length === 0) return null; + + return ( + + + + {props.t ? ( + + {props.t} + + ) : } + + + {copied ? : } + {copied ? 'Copied' : 'Copy'} + + + + CSV + + + + + + + + + + ); +} + +// Checklist Widget - Shows tasks with status (done/todo/blocked) +function WidgetChecklist({ props }) { + const items = []; + + for (const key of Object.keys(props)) { + const baseKey = key.replace(/\d+$/, ''); + const value = props[key]; + + if (baseKey === 'done' || baseKey === 'todo' || baseKey === 'blocked') { + items.push({ status: baseKey, text: value }); + } + } + + if (items.length === 0) return null; + + const statusStyles = { + done: { color: COLORS.success, icon: Check, bgColor: 'rgba(76, 130, 92, 0.12)' }, // Pine 100 + todo: { color: COLORS.text.muted, icon: null, bgColor: 'transparent' }, + blocked: { color: COLORS.error, icon: X, bgColor: 'rgba(199, 70, 52, 0.1)' }, // Oracle Red + }; + + return ( + + + {props.t && ( + + {props.t} + + )} + + + {items.map((item, index) => { + const style = statusStyles[item.status]; + const IconComponent = style.icon; + + return ( + + + + {IconComponent && } + + + {item.text} + + + + ); + })} + + + + ); +} + +// Section Widget - Collapsible content section +function WidgetSection({ props }) { + const [expanded, setExpanded] = useState(true); + + return ( + + + {/* Header - clickable to toggle */} + setExpanded(!expanded)} + sx={{ + display: 'flex', + alignItems: 'center', + gap: 1.5, + p: 2, + cursor: 'pointer', + '&:hover': { backgroundColor: 'rgba(0,0,0,0.02)' }, + }} + > + + + + + {props.t || 'Section'} + + + + {/* Content */} + + + {props.d && ( + + {props.d} + + )} + {props.ls && } + + + + + ); +} + +// Risk Widget - Risk card with severity level (using theme colors) +function WidgetRisk({ props, level }) { + const severityConfig = { + high: { color: COLORS.error, textColor: 'white', bgColor: '#d4594a', label: 'High Risk' }, // Oracle Red lighter + medium: { color: '#b87a2e', textColor: 'white', bgColor: COLORS.warning, label: 'Medium Risk' }, // Brand Yellow + low: { color: COLORS.success, textColor: 'white', bgColor: '#6a9b74', label: 'Low Risk' }, // Pine 100 lighter + }; + + const severity = severityConfig[level] || severityConfig.medium; + + return ( + + + + {/* Severity badge */} + + + + {severity.label} + + + + {props.t && ( + + {props.t} + + )} + + {props.d && ( + + {props.d} + + )} + + + + ); +} + +// Poll Widget - Choice selector with options + custom input +function WidgetPoll({ props, onSubmit, disabled, selectedData }) { + const [selected, setSelected] = useState(null); + const [customText, setCustomText] = useState(''); + const [isSubmitted, setIsSubmitted] = useState(false); + + useEffect(() => { + if (disabled && selectedData) { + setIsSubmitted(true); + if (selectedData._action === 'custom') { + setCustomText(selectedData.custom || ''); + } else { + setSelected(selectedData._action); + } + } + }, [disabled, selectedData]); + + const question = props.poll || props.t || 'Make a selection'; + const description = props.d; + const widgetId = props._id || null; + + const options = Object.keys(props) + .filter(k => k.match(/^op\d*$/)) + .map(k => props[k]); + + const handleOptionClick = (optionText) => { + if (isSubmitted || disabled) return; + setSelected(optionText); + setIsSubmitted(true); + if (onSubmit) onSubmit({ _action: optionText }, widgetId); + }; + + const handleCustomSubmit = () => { + if (isSubmitted || disabled || !customText.trim()) return; + setIsSubmitted(true); + if (onSubmit) onSubmit({ custom: customText.trim(), _action: 'custom' }, widgetId); + }; + + const isDisabled = isSubmitted || disabled; + + return ( + + + {/* Question */} + + + {question} + + + + {description && ( + + + {description} + + + )} + + {/* Option cards */} + + {options.map((option, index) => { + const isThisSelected = selected === option; + const isOtherSelected = selected !== null && !isThisSelected; + + return ( + + handleOptionClick(option)} + sx={{ + display: 'flex', + alignItems: 'center', + gap: 1.5, + px: 2, + py: 1.5, + borderRadius: 2, + border: `1.5px solid ${isThisSelected ? COLORS.primary : 'var(--dm-border, rgba(49, 45, 42, 0.12))'}`, + backgroundColor: isThisSelected ? 'rgba(199, 70, 52, 0.06)' : 'var(--dm-subtle, rgba(49, 45, 42, 0.02))', + cursor: isDisabled ? 'default' : 'pointer', + opacity: isOtherSelected ? 0.5 : 1, + transition: 'all 0.2s ease', + ...(!isDisabled && { + '&:hover': { + borderColor: COLORS.primary, + backgroundColor: 'rgba(199, 70, 52, 0.04)', + transform: 'translateX(4px)', + }, + }), + }} + > + {/* Number badge */} + + {isThisSelected ? : index + 1} + + + + {option} + + + + ); + })} + + + {/* Custom input area */} + + + setCustomText(e.target.value)} + onKeyDown={(e) => { + if (e.key === 'Enter' && !isDisabled && customText.trim()) { + e.preventDefault(); + handleCustomSubmit(); + } + }} + disabled={isDisabled} + fullWidth + sx={{ + '& .MuiOutlinedInput-root': { + backgroundColor: INPUT.backgroundColor, + '& fieldset': { border: INPUT.border }, + '&:hover': { backgroundColor: isDisabled ? INPUT.backgroundColor : INPUT.hoverBackground }, + '&.Mui-focused': { backgroundColor: INPUT.hoverBackground }, + }, + }} + /> + + + + + + ); +} + +// Mail Widget - Email preview card +// PPT Widget - Embeds PowerPoint presentation from URL +function WidgetPPT({ props }) { + const [isLoading, setIsLoading] = useState(true); + const [isFullscreen, setIsFullscreen] = useState(false); + const pptUrl = props.ppt; + const encodedUrl = encodeURIComponent(pptUrl); + const viewerUrl = `https://view.officeapps.live.com/op/embed.aspx?src=${encodedUrl}`; + + // Extract filename from URL for display + const filename = pptUrl.split('/').pop()?.split('?')[0]?.replace(/_/g, ' ')?.replace('.pptx', '') || 'Presentation'; + + const handleFullscreen = () => { + setIsFullscreen(!isFullscreen); + }; + + const handleOpenExternal = () => { + window.open(viewerUrl, '_blank'); + }; + + return ( + + + {/* Header */} + + + + + + + + {props.t || filename} + + + PowerPoint Presentation + + + + {/* Action buttons */} + + e.currentTarget.style.backgroundColor = 'rgba(255,255,255,0.25)'} + onMouseLeave={(e) => e.currentTarget.style.backgroundColor = 'rgba(255,255,255,0.15)'} + > + + + e.currentTarget.style.backgroundColor = 'rgba(255,255,255,0.25)'} + onMouseLeave={(e) => e.currentTarget.style.backgroundColor = 'rgba(255,255,255,0.15)'} + > + + + {isFullscreen && ( + + + + )} + + + + + {/* Slide viewer */} + + + {/* Loading overlay */} + {isLoading && ( + + + + + + Loading presentation... + + + )} + + +